QA@IT
«回答へ戻る

回答を投稿

コントローラを下記のような感じにするとどうでしょうか。基本的な考え方として、

  • リクエスト間でインスタンス変数の内容の受け渡しは(基本的には)出来ないので、都度 params の情報を使いインスタンスを生成する
  • params に値をセットするには、form を使うか、ルーティングで設定した値(今回のケースで言えば /shops/1/menus/new にリクエストを投げると params[:shop_id] に 1 が入るはず)を使う

の二点を抑えると form を利用したレコードの生成ができるようになると思います。

def new
  @shop = Shop.find(params[:shop_id])
  @menu = Menu.new(shop: @shop)
end

def create
  @shop = Shop.find(params[:shop_id])
  @menu = @shop.menus.build(params[:menu])
  if @menu.save
    redirect_to @menu, notice: "メニュー作成完了"
  else
    render action: "new"
  end
end
コントローラを下記のような感じにするとどうでしょうか。基本的な考え方として、

* リクエスト間でインスタンス変数の内容の受け渡しは(基本的には)出来ないので、都度 params の情報を使いインスタンスを生成する
* params に値をセットするには、form を使うか、ルーティングで設定した値(今回のケースで言えば /shops/1/menus/new にリクエストを投げると params[:shop_id] に 1 が入るはず)を使う

の二点を抑えると form を利用したレコードの生成ができるようになると思います。

```
def new
  @shop = Shop.find(params[:shop_id])
  @menu = Menu.new(shop: @shop)
end

def create
  @shop = Shop.find(params[:shop_id])
  @menu = @shop.menus.build(params[:menu])
  if @menu.save
    redirect_to @menu, notice: "メニュー作成完了"
  else
    render action: "new"
  end
end
```