【问题标题】:Rails routes.rb syntaxRails routes.rb 语法
【发布时间】:2012-02-05 15:51:15
【问题描述】:

我已经搜索和搜索,但我找不到一个说明 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 天时间时,一切都会好起来的!

【问题讨论】:

标签: ruby-on-rails routes nested-routes


【解决方案1】:

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

根据您的问题,听起来您在 modelA 下命名了 modelB,但您还希望 modelAid 位于路由本身内。

如果你的ModelBController 看起来像这样:

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

那么你可以这样做:

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

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

相反,您应该:

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

而您的 modelB 控制器将是:

class ModelBController < ApplicationController
  # controller code here
end

那你就可以了

resources :modelA do
  resources :modelB
end

【讨论】:

  • 谢谢!!我真的不是故意在modelA下创建modelB。我试图弄清楚如何嵌套资源,以便http://myserver/modelB 无法访问,只能通过http://myserver/modelA/:modelA_id/modelB 访问,并且有人建议使用rails generate controller modelA/modelB。我现在意识到我应该使用路由而不是通过限定控制器来实现我的原始目标。你可以说我是新手。也就是说,在什么情况下推荐范围界定?
  • 像这样对控制器进行命名空间更有利于组织它们,这只是一个偏好问题。它只是为您现在可能不需要的路由增加了一点复杂性。我建议使用简单的嵌套资源路线。
猜你喜欢
  • 1970-01-01
  • 2013-09-15
  • 1970-01-01
  • 2010-10-12
  • 2011-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多