我正在寻找我的一个控制器的根执行动作。 我可以轻松地做到这一点:
map.root :controller => 'articles', :action => 'index'
当我去localhost:3000 /它列出所有文章 - 这太棒了! 但是,我想要实现的是像这样的URL
localhost:3000/1
显示ID为1的文章。 改变路线以下是我认为我必须做的事情:
map.root :controller => 'articles', :action => 'show'
但它似乎不起作用。相反 - 它寻找一个名为1
的控制器 - 它不存在。
我将如何做到这一点?
谢谢!
答案 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 => '/'
这样你的所有文章都将直接在根
下