我搜索过并搜索过,我找不到一个在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'
我知道我尝试过的一些事情显然是错的,但是当你在一个问题上花了2天时,一切都会发生!
答案 0 :(得分:0)
没有人对路由语法有“权威”指南的原因是它非常灵活,所以你可能只写一个主题的几章。不过,我建议:http://guides.rubyonrails.org/routing.html
根据您的问题,听起来您modelB
下的modelA
命名空间,但您也希望id
modelA
位于路线本身内。
因此,如果您的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