Rails routes.rb语法

我搜索过并搜索过,我找不到一个页面,其中列出了Rails 3中routes.rb的语法。有指南,概述,甚至是高级示例,但为什么没有一个页面说明每个关键字的确切语法?? 这一页

http://www.engineyard.com/blog/2010/the-lowdown-on-routes-in-rails-3/

包含许多高级示例,但没有花时间讨论给出的所有示例的行为。 如果有人能指出我打破routes.rb语法的页面,我将不胜感激。

这是我试图解决的问题。 我有两个型号modelA和modelB。 关系是modelA has_many modelB和modelB belongs_to modelA。 我在modelA的命名空间下为modelB创建了控制器。 所以在我的rails app文件夹中,我有

app/controllers/modelA_controller.rb app/controllers/modelA/modelB_controller.rb 

我希望我的路线是这样的:

 http://localhost:3000/modelA/:modelA_id/modelB/ [index] http://localhost:3000/modelA/:modelA_id/modelB/:modelB_id [show] etc. 

我在routes.rb中尝试了以下操作,但没有一个工作:

 resources :modelA do resources :modelB end -- resources :modelA do member do resources :modelB end end -- namespace :modelA do resources :modelB end -- match '/modelA/:modelA_id/modelB/action', :to => '/modelA/modelB#action' 

我知道我尝试的一些事情显然是错的,但是当你花了两天时间解决一个问题时,任何事情都会发生!

没有人对路由语法有“明确”指南的原因是它非常灵活,所以你可能只写一个主题的几章。 但是,我建议: http : //guides.rubyonrails.org/routing.html

从你的问题来看,听起来你是modelB下的modelA但你也希望modelAid在路由本身内。

所以如果你的ModelBController看起来像:

 class ModelA::ModelBController < ApplicationController # controller code here end 

然后你可以这样做:

 resources :modelA do resources :modelB, :module => :modelA end 

但是,您确定要将控制器命名为这样吗? 如果您只想要嵌套资源(如典型的has_many关系),则不需要在modelB下使用命名空间modelA

相反,你有:

 /app /controllers /modelA # some files /modelB # some files 

而你的modelB控制器将是:

 class ModelBController < ApplicationController # controller code here end 

然后你可以做到

 resources :modelA do resources :modelB end