QA@IT
«回答へ戻る

回答を投稿

scaffoldでShopとMenuを作ったときに config/routes.rb が以下のようになっているはずです。

resources :shops
resources :menus

このままだとMenuコントローラはShopとは独立して動くので、Menuコントローラーを実行した時にShopの情報はどこにもありません。

rake routes して、どのようなリクエストがどのようなパラメータを受け取り、処理されるか確認しましょう。(大事)

次は、ルーティングを以下のようにしてみましょう。

resources :shops do
  resources :menus
end

認識されるURL構造が変わります。(これも rake routes で確認)

:shop_id というパラメータがMenuコントローラのアクションに渡ってくるようになるので、親になる @shopfind してやりましょう。子であるMenuを作成するときは、与えられたパラメータを使って @shop.menus.create が便利です。

ビュー内では、たとえばMenuの作成ビューへのリンクは new_shop_menu_url(@shop) で作成します。(これも rake routes で確認)

form_for には [@shop,@menu] という配列を渡してやりましょう。

scaffoldでShopとMenuを作ったときに config/routes.rb が以下のようになっているはずです。

~~~~ruby
resources :shops
resources :menus
~~~~

このままだとMenuコントローラはShopとは独立して動くので、Menuコントローラーを実行した時にShopの情報はどこにもありません。

`rake routes` して、どのようなリクエストがどのようなパラメータを受け取り、処理されるか確認しましょう。(大事)

次は、ルーティングを以下のようにしてみましょう。

~~~~ruby
resources :shops do
  resources :menus
end
~~~~

認識されるURL構造が変わります。(これも `rake routes` で確認)

`:shop_id` というパラメータがMenuコントローラのアクションに渡ってくるようになるので、親になる `@shop` を `find` してやりましょう。子であるMenuを作成するときは、与えられたパラメータを使って `@shop.menus.create` が便利です。

ビュー内では、たとえばMenuの作成ビューへのリンクは `new_shop_menu_url(@shop)` で作成します。(これも `rake routes` で確認)

`form_for` には `[@shop,@menu]` という配列を渡してやりましょう。