在routes.rb中配置了这样的一个资源:
按上面的配置,url:/pages/2/discussions/prequery岂无疑问应该是对应discussions这个controller中的prequery方法,但事实上,rails认为这个url对应的是show方法,prequery这个方法名(它本来就是一个方法名)在路由中被rails认为是一个discussion的ID,因为会报错如下:
[quote]
ActiveRecord::RecordNotFound in DiscussionsController#show
Couldn't find Discussion with ID=prequery
[/quote]
由此可见,对于这种格式的url:/pages/2/discussions/xx(使用HTTP GET方法),rails就会先找到show方法,xx当然被认为是ID。
那么我就不明白了,如果是这样的话,那路由中的resouces方法的collection选项岂不是干看不能用,提供这个选项不是扯谈吗?我认为既然我已经指定的方法名,collection中指定的方法的优先级应该高于show方法。
今天心情本来不咋样,搞了半天这个,更是郁闷...
map.resources :pages do |page|
page.resources :discussions,:collection => {:prequery => :get} do |discussion|
discussion.resources :responses
end
end
按上面的配置,url:/pages/2/discussions/prequery岂无疑问应该是对应discussions这个controller中的prequery方法,但事实上,rails认为这个url对应的是show方法,prequery这个方法名(它本来就是一个方法名)在路由中被rails认为是一个discussion的ID,因为会报错如下:
[quote]
ActiveRecord::RecordNotFound in DiscussionsController#show
Couldn't find Discussion with ID=prequery
[/quote]
由此可见,对于这种格式的url:/pages/2/discussions/xx(使用HTTP GET方法),rails就会先找到show方法,xx当然被认为是ID。
那么我就不明白了,如果是这样的话,那路由中的resouces方法的collection选项岂不是干看不能用,提供这个选项不是扯谈吗?我认为既然我已经指定的方法名,collection中指定的方法的优先级应该高于show方法。
今天心情本来不咋样,搞了半天这个,更是郁闷...