我已经搜索了,但是找不到在Rails 3中拼写route.rb语法的页面。虽然有一些准则,概述甚至高级示例,但是为什么没有一个页面可以拼出每个关键字的确切语法呢? ??这一页

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

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

这是我要解决的问题。我有两个模型modelA和modelB。该关系是modelA has_many modelB和modelB属于modelA。我在modelA的命名空间下为modelB创建了 Controller 。所以在我的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天的时间,一切都会发生!

最佳答案

没有人提供关于路由语法的“权威性”指南的原因是它非常灵活,因此您可能只针对该主题写了几章。但是,我建议:http://guides.rubyonrails.org/routing.html

从您的问题出发,听起来好像您是在modelB下命名modelA,但您也希望idmodelA位于路线本身内。

因此,如果您的ModelBController看起来像:

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

那么您可以这样做:
resources :modelA do
  resources :modelB, :module => :modelA
end

但是,您确定要像这样对 Controller 命名空间吗?如果您只想像典型的has_many关系那样嵌套资源,则无需在modelB下命名modelA

相反,您将拥有:
/app
  /controllers
    /modelA
      # some files
    /modelB
      # some files

您的modelB Controller 将是:
class ModelBController < ApplicationController
  # controller code here
end

那你可以做
resources :modelA do
  resources :modelB
end

08-07 05:50