1

ネストされたルート(優れたURLヘルパー、アクセスなど)とaccepts_nested_attributes_forを使用したフォームのネストされたリソースを処理できると思いますが、両方を見ると、ルートで何を使用しますか?

resources :schools do
   resources :documents
end

そしてまた

resources :schools :has_many => :documents
end

これらの違いを教えてください。
明らかに、has_manyは1対多の関係のためのものです。パスヘルパーを生成し、正しいルーティングを必要としますか?ブロックする場合、それはどのような関係を意味しますか?パスヘルパー(/ schools / document)と、学校の下に複数のリソース(本、たとえばドキュメント以外)が必要な場合は、最初の方法でdo-endブロックに追加できますが、2番目の方法では2行だけです。 、has_manyごとに1つ?
ガイドとAPIを読んだことがありますが、ここでは違いや使用法がよくわかりません。2つの違いを明確に説明できる人は誰でも(「aはxを実行し、bはyを実行する」という形式で)すばらしいでしょう。 )大歓迎です:)

ああ、そしてもちろん、それらがモデルにhas_manyを持っていることにどのように関係しているのか-したがって、これらの関係は、has_many、コントローラー(主にパスの使用による)、およびビュー(ネストされた属性を持つフォームを介して)を持つモデルにあると思います。

4

2 に答える 2

1

どちらも同じことをします。どちらを選ぶかはあなた次第です。

読みやすいので、doブロック形式が好きです

:has_many => [:docs, :otherthings]ところで、has_many形式を使用すると、複数のネストされたルートに対して実行できます

于 2011-04-22T19:29:55.403 に答える
0

has_many構文は、ブロック構文が気に入らなかった人の省略形としてRails2に追加されたものだと思います。あなたはそれについてのブログ投稿をここで見ることができます。試したところ、Rails3はhas_manyオプションを無視しているようです。したがって、私にとっての出力は次のとおりです。

resources :schools do
   resources :documents
end

ルートを作成しました:

    school_documents GET    /schools/:school_id/documents(.:format)          {:action=>"index", :controller=>"documents"}
                     POST   /schools/:school_id/documents(.:format)          {:action=>"create", :controller=>"documents"}
 new_school_document GET    /schools/:school_id/documents/new(.:format)      {:action=>"new", :controller=>"documents"}
edit_school_document GET    /schools/:school_id/documents/:id/edit(.:format) {:action=>"edit", :controller=>"documents"}
     school_document GET    /schools/:school_id/documents/:id(.:format)      {:action=>"show", :controller=>"documents"}
                     PUT    /schools/:school_id/documents/:id(.:format)      {:action=>"update", :controller=>"documents"}
                     DELETE /schools/:school_id/documents/:id(.:format)      {:action=>"destroy", :controller=>"documents"}
             schools GET    /schools(.:format)                               {:action=>"index", :controller=>"schools"}
                     POST   /schools(.:format)                               {:action=>"create", :controller=>"schools"}
          new_school GET    /schools/new(.:format)                           {:action=>"new", :controller=>"schools"}
         edit_school GET    /schools/:id/edit(.:format)                      {:action=>"edit", :controller=>"schools"}
              school GET    /schools/:id(.:format)                           {:action=>"show", :controller=>"schools"}
                     PUT    /schools/:id(.:format)                           {:action=>"update", :controller=>"schools"}
                     DELETE /schools/:id(.:format)                           {:action=>"destroy", :controller=>"schools"}

その間

resources :schools :has_many => :documents

ルートを作成しました:

    schools GET    /schools(.:format)          {:action=>"index", :controller=>"schools"}
            POST   /schools(.:format)          {:action=>"create", :controller=>"schools"}
 new_school GET    /schools/new(.:format)      {:action=>"new", :controller=>"schools"}
edit_school GET    /schools/:id/edit(.:format) {:action=>"edit", :controller=>"schools"}
     school GET    /schools/:id(.:format)      {:action=>"show", :controller=>"schools"}
            PUT    /schools/:id(.:format)      {:action=>"update", :controller=>"schools"}
            DELETE /schools/:id(.:format)      {:action=>"destroy", :controller=>"schools"}

あなたの質問に対する本当の答えは、それらが同じことをするはずであるということだと思いますが、構文が異なります。

于 2011-04-22T19:39:17.937 に答える