我有一点问题......我设置了一个用于服务德国网站的rails应用程序.为了利用Rails的内部复数功能,我将所有模型保留为英文(例如模型" JobDescription
").现在,如果我打电话给" http://mysite.com/job_descriptions/
",我得到了所有job_descriptions
......到目前为止,这么好.因为我不想job_descriptions
在我的网址中使用英文术语" ",所以我将以下内容放入我的routes.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更加SEO友好,我想在URL中交换id以获得更加用户友好的slug.因此,我把以下内容放在我的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
".我已经尝试在link_to代码job_description_path
中用" "替换" german_term_path
",但只生成" http://mysite/german_term/13
".显然,to_param
不叫.我找到的一个解决方法是构建链接:
<%= link_to job_description.name, german_term_path(job_description.to_param) %>
但是改变link_to
我代码中的所有调用是相当繁琐的.我想要的是在URL中出现时job_description
用" german_term
" 替换" " .
有什么想法吗?!?
问候,
塞巴斯蒂安
我认为你需要使用宁静的路线助手来获得你想要的东西.
在这种情况下,它不需要太多的重新分解(假设您已将JobDescriptions映射为资源).保留to_param,并将JobDescriptions路由更改为以下内容:
map.resources :job_descriptions, :as => 'german_term'
希望这可以帮助!