论坛首页 编程语言技术论坛

rails路由寻址的先后顺序

浏览 3262 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-31  
在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方法。

今天心情本来不咋样,搞了半天这个,更是郁闷...
   发表时间:2008-10-31  
这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。
比如
map.resources :discussions, :path_prefix => "/pages/:page_id"
0 请登录后投票
   发表时间:2008-10-31  
nan1nan1 写道
这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。
比如
map.resources :discussions, :path_prefix => "/pages/:page_id"


没有做这样的配置
0 请登录后投票
   发表时间:2008-10-31  
Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用
rake routes
检查一下生成的各种path
0 请登录后投票
   发表时间:2008-10-31  
引用

map.resources :pages :has_many => [:discussions]     
 
map.resources :discussions, :collection => {:prequery => :get}, :has_many => [:responses]     

map.resources :responses  


responses你也敢用,呵呵  
0 请登录后投票
   发表时间:2008-10-31  
Quake Wang 写道
Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用
rake routes
检查一下生成的各种path


rake routes,这个rake非常的有用,可以很直观地看到自己配置的路由的情况。受教了。

另外,这个问题已经解决了,我刚才试跑了一下,已经没有问题了,是会先解析prequery方法的,之所以会报这样的错误,估计是我修改了routes.rb之后,没有重启,路由没有更新。
0 请登录后投票
   发表时间:2008-10-31  
liuqiang 写道
引用

map.resources :pages :has_many => [:discussions]     
 
map.resources :discussions, :collection => {:prequery => :get}, :has_many => [:responses]     

map.resources :responses  


responses你也敢用,呵呵  


这个关键字,我后来写代码的时候,发现真的是比较麻烦的,因为会的response冲突,还是把它改掉算了,呵呵,以后写代码的时候真要注意一下和关键字的冲突,尤其是ruby这样的动态语言。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics