1

ItemモデルとFixerモデルを備えたアプリがあります。各アイテムはフィクサーに属し、フィクサーは多くのアイテムを持つことができます。特定のフィクサーがそれらに関連付けられた特定のアイテムに関する情報を更新できる「ログ」ページを作成したいと思います。理想的にはこのようなもの

www.myappname.com/fixers/<fixer_id>/log/<item_id>

私はRailsにかなり慣れていないので、これのルーティング/コントローラーを理解する方法がよくわかりません。ルーティングに関するRailsガイドのセクションを調べましたが、必要なものに似ているのはネストされたモデルだけですが、アイテムは技術的に「belong_to」フィクサーである可能性がありますが、実際にはそうではないため、モデルをネストしたくないのが理想的です。現実の世界の場合(フィクサーは関連付けられているだけで、belong_toが最も賢明な方法でした)、ネストを必要とする/意味のある関係の他の部分はありません。さらに重要なのは、モデルのネストが何を意味するのか、または何をするのかを実際に理解していないことです。また、完全に理解していないソリューションの実装は避けようとしています。

ネスティングが進むべき道である場合、私に知らせてください、しかしそうでなければ、私はこれをどのようにルーティングすることができますか?私はroutes.rbファイルでこれを試しました:

match 'fixers/:id/log/:id' => 'fixers#log'

log.html.erbを作成しましたが、コントローラーでそのパラメーターを選択する方法がわかりません(選択している「:id」をどのように知るのですか?これを行うためのより良い方法はありますか? ?

ありがとう!

4

2 に答える 2

3

それらは相互に関連付けられているため、ネストされたルーティングを使用してみてください。

resources :fixers do
  resources :log
end
于 2012-10-27T01:03:41.320 に答える
1

Railsルーティングガイドで読むことができるように、ネストされたリソースは1対多の関係に使用されます。

パラメータには、適切と思われる方法で名前を付けることができます。名前を付ける必要はありません:id。例えば:

match 'fixers/:id/log/:item_id' => 'fixers#log'

とあなたのコントローラーで:

@fixer = Fixer.find(params[:id])
@item = Item.find(params[:item_id])
于 2012-10-27T01:14:54.570 に答える