Rails路由 - 以root身份显示操作

时间:2010-03-05 09:37:47

标签: ruby-on-rails routes

我正在寻找我的一个控制器的根执行动作。 我可以轻松地做到这一点:

map.root :controller => 'articles', :action => 'index'

当我去localhost:3000 /它列出所有文章 - 这太棒了! 但是,我想要实现的是像这样的URL

localhost:3000/1

显示ID为1的文章。 改变路线以下是我认为我必须做的事情:

map.root :controller => 'articles', :action => 'show'

但它似乎不起作用。相反 - 它寻找一个名为1的控制器 - 它不存在。

我将如何做到这一点?

谢谢!

4 个答案:

答案 0 :(得分:6)

routes.rb

中试试

map.connect ':id', :controller => 'articles', :action => 'show'

您需要确保这是低优先级路由,因为它有多么通用。即,将它放在routes.rb文件的底部但在此部分之上(如果您尚未将其删除):

# low-priorty article show route
map.connect ':id', :controller => 'articles', :action => 'show'

# Install the default routes as the lowest priority.
# Note: These default routes make all actions in every controller accessible via GET requests. You should
# consider removing or commenting them out if you're using named routes and resources.
map.connect ':controller/:action/:id'
map.connect ':controller/:action/:id.:format'

答案 1 :(得分:5)

根路由只定义一条路由。不是几个。您可以定义另一条路线

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

如果您想要这种路线,可能资源(http://api.rubyonrails.org/classes/ActionController/Resources.html#M000522)对您来说很棒。

答案 2 :(得分:3)

在Rails 3中,路线中没有可用的地图方法。而是使用这样的东西:

match ':id', :controller => 'articles', :action => 'show'

请记住将它放在应该优先的路线下面。

答案 3 :(得分:2)

使用此

resource :articles, :path => '/'

这样你的所有文章都将直接在根