2010-02-26 111 views
2
class Content < ActiveRecord::Base 
    has_friendly_id :title, :use_slug => true 
end 

我怎么可以做一个像/ about-us而不是/ contents/about-us的链接?friendly_id/content_url没有范围

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

回答

0

好的,重新做这个答案。我已经研究了一下,包括has_friendly_id插件,看起来不错,但之前没有用过。我有点推出了自己的方法来创建友好的网址。

我想我现在明白你要求什么......你的内容表中的每个标题,你想要一个友好的网址,并且你想要该网址在/ (root)而不是/content下开始。我没有看到使用friendly_id做到这一点的直接方法,但那没关系,routes.rb很容易做到这一点。

修改routes.rb中,使contentroot

map.root :controller => 'content' 

我想多map.root调用可以做,它只是取决于订单,如果有冲突。如果没有,这只是一个别名

map.connect '', :controller => 'content' 

祝你好运!

+0

我的意思是我有一个模型,标题为“关于我们” ,我不想每次将新模型添加到数据库时都修改config/routes文件 – astropanic 2010-02-26 06:12:46

+0

我更多地解答了我的答案。如果您需要更多解释,请告诉我。看起来你对路线的目的有些困惑,因为你不断提到一个模型。 “路径”或“链接”实际上映射到控制器和操作。然后通过控制器中的命名操作方法访问该模型。我不知道有什么方法可以直接路由到模型。如果有办法,它肯定不是轨道应该工作的方式。 – dpb 2010-02-26 16:17:21

+0

我知道轨道路由如何工作,并知道动作控制器mechanizm,但我想要像http://ministerstwogadzetow.com这样的链接,例如,看看这两个链接http://www.ministerstwogadzetow.com/wyciagarka-do- slodyczy.html - 这指向产品控制器显示操作和这一个http://www.ministerstwogadzetow.com/zegary-i-zegarki.html指向类别控制器显示操作(PHP引擎),你可以看到,有没有/类别/东西或/产品/东西,这就是我想要的 – astropanic 2010-02-26 18:03:58

3

我刚刚为我正在处理的网站完成了此操作。

它实际上是指定正确路线的问题。

当你的模式被称为内容,我想你已经映射的内容作为这样的资源(在你的routes.rb):

map.resources :content 

这将处理这样的URL:

http://example.com/content/my-special-content-page

要处理像URL:

http://example.com/my-special-content-page

您只需将路由映射是这样的:

map.content '/:id', :controller => 'content', :action => 'show' 

注:

路线从顶部工作底部,所以你需要把这个低于大多数事情。尤其是:

map.root :controller => "welcome" 

如果你把上面这个新的路线,你会拥有一个错误,因为它会尝试打电话与该Controller.show行动:零的ID。

你还需要确保随时随地可以生成你的意见,你的网址就需要这样使用这条新航线:

= link_to "My Special Page", content_path(@content) 
+0

不完全是我想要的,但一个很好的解决方案。 如果我有两个或更多型号,不仅可以使用内容,而且可以使用产品和照片,我应该怎么做? – astropanic 2010-03-01 21:31:08