7

検索しても検索しても、Rails 3 の routes.rb の構文を詳しく説明しているページが見つかりません。ガイドライン、概要、高度な例さえありますが、各キーワードの正確な構文を詳しく説明しているページがないのはなぜですか?? このページ

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

多くの高度な例が含まれていますが、与えられたすべての例の動作について議論する時間はありません。誰かが routes.rb の構文を分解するページを教えてくれれば幸いです。

これが私が解決しようとしている問題です。モデル A とモデル B の 2 つのモデルがあります。関係は、modelA has_many modelB と modelB belongs_to modelA です。modelA の名前空間の下に modelB のコントローラーを作成しました。したがって、私のレールアプリフォルダーには、

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'

私が試したことのいくつかが明らかに間違っていることはわかっていますが、1 つの問題に 2 日間費やした後は、すべてがうまくいきます。

4

1 に答える 1

0

ルーティング構文に関する「決定的な」ガイドを誰も持っていない理由は、それが非常に柔軟であるため、その 1 つの主題だけでいくつかの章を書くことができるからです。ただし、お勧めします: http://guides.rubyonrails.org/routing.html

modelBあなたの質問から、名前空間を下に置いているように聞こえますが、 forをルート自体の中にmodelA入れたいと思っています。idmodelA

したがって、次のようにModelBController見える場合:

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

次に、次のことができます。

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

ただし、そのようにコントローラーの名前空間を変更してもよろしいですか? 典型的なリレーションシップのようにネストされたリソースが必要な場合は、名前空間を下に置くhas_many必要はありません。modelBmodelA

代わりに、次のようになります。

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

そして、modelBコントローラーは次のようになります。

class ModelBController < ApplicationController
  # controller code here
end

それからあなたはすることができます

resources :modelA do
  resources :modelB
end
于 2012-01-09T01:46:54.227 に答える