rails路由寻址的先后顺序

在routes.rb中配置了这样的一个资源:
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,因为会报错如下:
引用

ActiveRecord::RecordNotFound in DiscussionsController#show

Couldn't find Discussion with ID=prequery


由此可见,对于这种格式的url:/pages/2/discussions/xx(使用HTTP GET方法),rails就会先找到show方法,xx当然被认为是ID。

那么我就不明白了,如果是这样的话,那路由中的resouces方法的collection选项岂不是干看不能用,提供这个选项不是扯谈吗?我认为既然我已经指定的方法名,collection中指定的方法的优先级应该高于show方法。

今天心情本来不咋样,搞了半天这个,更是郁闷...

你可能感兴趣的:(Ruby,ActiveRecord,Rails)