`
yangzhihuan
  • 浏览: 167530 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

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方法。

今天心情本来不咋样,搞了半天这个,更是郁闷...
分享到:
评论
6 楼 yangzhihuan 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这样的动态语言。
5 楼 yangzhihuan 2008-10-31  
Quake Wang 写道
Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用
rake routes
检查一下生成的各种path


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

另外,这个问题已经解决了,我刚才试跑了一下,已经没有问题了,是会先解析prequery方法的,之所以会报这样的错误,估计是我修改了routes.rb之后,没有重启,路由没有更新。
4 楼 liuqiang 2008-10-31  
引用

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

map.resources :responses  


responses你也敢用,呵呵  
3 楼 QuakeWang 2008-10-31  
Rails的嵌套路由是肯定没有问题的,我们在实际应用中也有很多地方这样用。
你检查看看是不是有其它路由命名冲突了,可以用
rake routes
检查一下生成的各种path
2 楼 yangzhihuan 2008-10-31  
nan1nan1 写道
这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。
比如
map.resources :discussions, :path_prefix => "/pages/:page_id"


没有做这样的配置
1 楼 nan1nan1 2008-10-31  
这个routes没什么错,除了nesting有点儿深。。
怀疑是不是被前面写的routes覆盖掉了。
比如
map.resources :discussions, :path_prefix => "/pages/:page_id"

相关推荐

    rails路由之图文解释

    让你知道在rails中如何使用路由,路由与URL是如何对应的。

    rails 路由

    简要列出rails路由的方方面面简要列出rails路由的方方面面简要列出rails路由的方方面面简要列出rails路由的方方面面

    routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性

    routing-filter 包裹了 Rails 路由系统的复杂野兽,在 Rails URL 识别和生成中提供了看不见的灵活性和强大功能 路由过滤器围绕着复杂的野兽,Rails 路由系统在 Rails URL 识别和生成中提供了看不见的灵活性和强大...

    Ruby on Rails路由拒绝服务漏洞

    本文发布Ruby on Rails路由拒绝服务漏洞,指出它影响到的系统、不受它影响的系统以及提供给用户厂商补丁下载的地址。

    Ruby-Annotate注释Rails类模式和路由信息

    本文将深入探讨"Ruby-Annotate"工具,这是一个用于Rails项目的实用程序,能够自动为你的模型添加注释,显示有关数据库模式、关联和路由的信息。 **Ruby-Annotate** 是一个Ruby gem,它的主要功能是分析你的Rails...

    Ruby on Rails:路由系统详解.docx

    Ruby on Rails:路由系统详解.docx

    Rails项目源代码

    Rails的路由系统将URL映射到控制器的行动上,如`/sign_up`可能对应`users#new`,用于创建新用户。`config/routes.rb`文件定义了所有路由规则,包括资源路由、命名路由和自定义路由。 6. **视图模板**: 视图使用...

    grape-rails-routes:为 Grape with Rails 添加路由打印

    将 Grape API 路由装入 Rails 后,Grape API 路由通常不会打印在rake routes或/rails/info/routes 。 这个 gem 将 Grape 的路由打印功能添加到 Rails 中。 用法 将此行添加到您的Gemfile gem 'grape-rails-routes...

    Rails 101 入门电子书

    #### 六、Rails的路由 - **概念介绍**: 路由是连接用户请求URL与应用程序逻辑的关键组件。 - **实现方式**: - 配置文件`config/routes.rb`。 - 常见的路由类型: 默认路由、命名路由、约束路由等。 #### 七、练习...

    Rails

    5. **路由**:Rails的路由系统将URL映射到控制器的行动上,提供了一种灵活的方式来定义和管理应用的路由结构。 描述中提到的博文链接指向了一个ITEYE博客文章,尽管具体内容未提供,但通常这样的博客可能会包含...

    路由过滤器:路由过滤器围绕着Rails路由系统所包含的复杂野兽,在Rails URL识别和生成中提供了看不见的灵活性和强大功能

    路由过滤器 路由过滤器围绕着Rails路由系统所要面对的复杂的野兽,以实现Rails URL识别和生成中看不见的灵活性和强大功能。 尽管Rails的路由功能强大而强大,但是当您需要以稍微离开Rails约定铺平道路的方式来设计...

    component base rails applications

    - 引擎路由(Engine Routes)定义了引擎中各个组件的路由规则,使主应用能够通过路由访问引擎的功能。 - 引擎挂载(Engine Mounting)是指将引擎组件整合进主Rails应用中的过程,通过定义挂载点来实现。 3. 组件...

    关于Ruby on Rails路由配置的一些建议

    ### 关于Ruby on Rails路由配置的一些建议 在Ruby on Rails框架中,路由是连接用户请求和应用程序逻辑的关键组成部分。正确的路由配置不仅能提高代码的可读性和维护性,还能帮助开发者更好地组织应用结构。本文将...

    The Rails 4 Way

    - **routes.rb文件**:这是Rails应用程序中配置路由规则的地方,通过编写不同的路由规则可以实现复杂的应用逻辑。 - **命名路由**:允许开发者通过名字引用路由,使得代码更具可读性,并且可以在路由规则改变时自动...

    rails指南 中文版

    Rails指南中文版是针对Ruby on Rails框架的一份详尽教程,旨在帮助开发者深入理解并熟练掌握这个强大的Web应用开发工具。Ruby on Rails(简称Rails)是一个基于Ruby语言的开源Web应用框架,它遵循MVC(Model-View-...

    rails敏捷开发的购物车系统

    接着,我们来看Rails的路由(Routing)。在购物车系统中,需要定义各种路由来映射HTTP请求到相应的控制器方法。例如,`resources :carts` 会自动生成CRUD(创建、读取、更新、删除)操作的路由,使得用户能够操作...

Global site tag (gtag.js) - Google Analytics