ruby-on-rails – Rails routes.rb语法

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 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

从你的问题来看,这听起来像是在modelA下命名为modelB,但你也希望modelA的id在路由本身内.

因此,如果您的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

猜你在找的Ruby相关文章