浏览 3262 次
锁定老帖子 主题:rails路由寻址的先后顺序
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2008-10-31
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方法。 今天心情本来不咋样,搞了半天这个,更是郁闷... 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-10-31
这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。 比如 map.resources :discussions, :path_prefix => "/pages/:page_id" |
|
返回顶楼 | |
发表时间:2008-10-31
nan1nan1 写道 这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。 比如 map.resources :discussions, :path_prefix => "/pages/:page_id" 没有做这样的配置 |
|
返回顶楼 | |
发表时间:2008-10-31
Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用 rake routes 检查一下生成的各种path |
|
返回顶楼 | |
发表时间:2008-10-31
引用 map.resources :pages :has_many => [:discussions] map.resources :discussions, :collection => {:prequery => :get}, :has_many => [:responses] map.resources :responses responses你也敢用,呵呵 |
|
返回顶楼 | |
发表时间:2008-10-31
Quake Wang 写道 Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用 rake routes 检查一下生成的各种path rake routes,这个rake非常的有用,可以很直观地看到自己配置的路由的情况。受教了。 另外,这个问题已经解决了,我刚才试跑了一下,已经没有问题了,是会先解析prequery方法的,之所以会报这样的错误,估计是我修改了routes.rb之后,没有重启,路由没有更新。 |
|
返回顶楼 | |
发表时间: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这样的动态语言。 |
|
返回顶楼 | |