我无法在这里或其他地方找到任何涵盖Rails 3中限制资源路由和添加额外的非RESTful路由的内容。这可能很简单,但我遇到的每个例子或解释都只涉及一个案例而不是同时解决两个问题。
以下是我在Rails 2中所做的示例:
map.resources :sessions, :only => [:new, :create, :destroy], :member => {:recovery => :get}
非常直观,我们只想要7个RESTful路由中的3个,因为其他的对于这个资源没有意义,但我们还想添加另一条用于账户恢复的路由。
现在,从我所了解的情况来看,这两件事情都非常简单:
resources :sessions, :only => [:new, :create, :destroy]
就像在Rails 2中一样。和:
resources :sessions do
member do
get :recovery
end
end
那么,我该如何将这两个东西结合起来呢?我还能使用旧的Rails 2方法吗?在Rails 3中有没有更好的方法来实现这个目标?
routes.rb
文件声明了resources :thing, :only => [:show] do get :foo, :on => :member end
,并且运行rake routes
命令后会得到foo_thing GET /thing/foo(.:format) thing#foo
和thing GET /thing(.:format) thing#show
两个路由。虽然链接到thing
的页面可以正常访问,但是如果代码中导航到foo_thing
链接时,我会收到一个 Rails "Routing Error" 错误页面,上面显示No route matches [GET] "/foo_thing"
,但是如果我在 URL 地址栏中输入.../thing/foo
,则可以正常访问。如果routes.rb
文件中有一行get 'foo_thing' => 'thing#foo'
,那么代码中的foo_thing
路径才能正常工作。请问我做错了什么? - Teemu Leisti