我有一个小问题...我设置一个轨道应用程序,是服务于一个德语网站。使用的轨道内部的复数形式特征的,我保留我所有的模型以英语(例如该模型"JobDescription").现在,如果我呼叫"http://mysite.com/job_descriptions/"我得到我的所有 job_descriptions....到目前为止,一切都很好.因为我不想英文术语"job_descriptions"在我的网址,我把以下进入我的路线。rb

map.german_term '/german_term', :controller => 'job_descriptions', :action => 'index'
map.german_term '/german_term/:id', :controller => 'job_descriptions', :action => 'show'

如果我呼叫"http://mysite.com/german_term/"或者"http://mysite.com/german_term/283"我得到我的所有 job_descriptions, ,这是好的。

然而,要使URL更多的搜索引擎友好,我想要交换的标识更多的用户友好的塞在的网址。因此,我把以下我 job_description.rb:

def to_param
"#{id}-#{name.gsub(/[^a-z0-9]+/i, '-')}"
end

其中,每当我使用"job_description_path"在任何 link_to 方法,使我的网址出来的东西像"http://mysite/job_descriptions/13-my-job-description-title".

然而,这是我坚持,我喜欢"http://mysite/german_term/13-my-job-description-title".我已经尝试过交换"job_description_path"与"german_term_path"在link_to代码,但是只有产生"http://mysite/german_term/13".显然, to_param 不是叫。一个解决办法,我发现建立的链接:

<%= link_to job_description.name, german_term_path(job_description.to_param) %>

但是,这是相当繁琐的改变所有 link_to 电话在我的代码。什么我想要的是取代"job_description"通过"german_term"每当它发生在一个网址。

任何想法?!?

问候,

塞巴斯蒂安

有帮助吗?

解决方案

我想你会需要使用基于REST的路线佣工得到你想要的东西。

在这种情况下,它不会花费太多重新分解(假设你已经映射JobDescriptions作为一种资源)。留下你to_param的是,改变你的JobDescriptions路线类似如下:

map.resources :job_descriptions, :as => 'german_term'

希望这有助于!

其他提示

滑轨仅利用

def to_params 
end

当你使用一个宁静的路线/链接URL帮手建设者。我所知道的唯一的办法是做类似你是如何做到的,除非你愿意只是取消你的英语链接和做这一切在德国。在这种情况下,刚刚摆脱命名路由线的,改变to_params使用正确的名称字段从数据库中。在这一点上,其余的路由应该表现正常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top