hidden_fieldメソッドで、newアクションで送った情報をcreateアクションで回収する

この前の記事で苦戦していたことが分かりましたので、記述します。

 

以下、ちゃんと動くようになったコードです。

こちら、Controller。

こちら、View。説明に事足りるように本質的なところだけを抜き取ったので、そのままではない。

 

で、なにをしているのか言うと、楽天APIで入手した情報が保存されていなければいったんnewアクションで保存し、そのデータを利用して読書会をつくるというもの。

 

で、createアクションで、読書会で用いる本の情報をbook_idとしてcirclesテーブルに保存しているのだ。

 

これにより、流れは

読書会でつかう本を検索

→いったん保存(すでに保存してあればテーブルから探してインスタンスを代入)

→その本と新規読書会とをbook_idによって結びつけたインスタンスを生成

→読書会をつくるページへ、その検索した本の情報をもっていく。同時に、読書会インスタンス(@book_circle)によってフォームを生成

f.hidden_fieldで、newアクションで@book_circleのカラムに代入されたbook_idを回収

→createアクションで保存。

 

エラーでは以下のようなことになっていました。

Image from Gyazo

@bookにインスタンスが代入されていない、と出ていたのです。

しかし、@book.image_urlで画像は表示されていたので、@bookにインスタンスが代入されていないわけないです。

 

で、よくわからなくなってコードをグチャグチャと書いていたわけですが、沼にハマってしまい・・・。

 

じつは、createアクションに@book_circleのbook_idが代入されていないだけだったのです。

このcreateアクションへbook_idカラムの情報を送る役目が、f.hidden_fieldなわけです。

 

これにより、画面上でなにか入力されなくとも、コードで情報をリレーのようにつないで次のアクションへと渡しているのです。