friendly_id / content_url没有范围

时间:2010-02-26 05:47:44

标签: ruby-on-rails seo hyperlink

class Content < ActiveRecord::Base
  has_friendly_id :title, :use_slug => true
end

我如何建立像/ about-us这样的链接而不是/ contents / about-us?

我应该修改content_url方法,还是有更好的方法?

2 个答案:

答案 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'
祝你好运!