class Content < ActiveRecord::Base
has_friendly_id :title, :use_slug => true
end
我如何建立像/ about-us这样的链接而不是/ contents / about-us?
我应该修改content_url方法,还是有更好的方法?
答案 0 :(得分:3)
我刚刚为我正在处理的网站做过这个。
实际上是指定正确的路线。
由于您的模型被称为内容,我认为您已经将Content映射为这样的资源(在您的routes.rb中):
map.resources :content
这会处理以下网址:
http://example.com/content/my-special-content-page
处理以下网址:
http://example.com/my-special-content-page
您只需要映射这样的路线:
map.content '/:id', :controller => 'content', :action => 'show'
注意:
路由工作从上到下,所以你需要把它放在大多数东西之下。特别是:
map.root :controller => "welcome"
如果您将新路线置于此之上,则最终会出现错误,因为它会尝试使用:id为nil调用Controller.show操作。
您还需要确保在视图中生成网址的任何位置,您需要使用以下新路线:
= link_to "My Special Page", content_path(@content)
答案 1 :(得分:0)
好的,重新做这个答案。我已经对此进行了更多研究,包括has_friendly_id插件,看起来不错,但之前没有使用过。我过去曾用自己的方法制作友好的网址。
我想我现在明白你要求的内容......你的内容表中的每个标题,你想要一个友好的网址,你希望该网址从/ (root)
开始,而不是/content
。我没有看到使用friendly_id做到这一点的直接方法,但是没关系,routes.rb很容易做到这一点。
修改routes.rb,使content
成为root
:
map.root :controller => 'content'
我认为可以进行多次map.root调用,如果存在冲突,则只取决于顺序。如果没有,它只是
的别名map.connect '', :controller => 'content'
祝你好运!