もふもふ技術部

fields_forを使って関連モデルのフィールドを表示したいけど表示されない


へ?たったこれだけだったのかよ…っていうようなRailsのハマりポイントをご紹介。

環境とか準備とか

Ruby 1.9.3
Rails 3.2.12

例えば、MemberとMemberInfoというモデルが1対1でリレーションする場合を想定。
現象自体は1対多でも同様に発生します。

イコールが抜けているだけ

Memberの登録・更新画面をこんな感じで書いたりする(ほぼscaffoldのまま)。

_form.html.erb

rails_hamari_01
あれれ。表示されませんね。

fields_forの正しい使い方はこうでした…orz
イコールが必要なんです。

こうやって書いておけばname属性も自動的に設定されるのでcontroller側で余計なコード書かないで同時更新されます。これは非常にコードがシンプルになる利点があるのですが、数時間ハマってしまいました、つらい。

rails_hamari_02

おまけその1 同時更新するには

自動的に同時更新するにはちょっとモデルに加工が必要です。それをしないとこんなエラーが。

attr_accessibleに関連モデルのattributesと、
accepts_nested_attributes_forに同時更新するモデル名(テーブル名)が必要になります。

member.rb

おまけその2 scaffoldの取り消し

scaffoldしてブログ掲載用の画面作ろうとしてちょっとミスりました。でも安心してください。このコマンドで取り消せます。

The following two tabs change content below.
原田 敦

原田 敦

日本CAWのエンジニア。もふもふ部の部長。得意分野はRuby on Railsを使った小規模WEBアプリケーションを高速で開発すること。週末の楽しみは一人お菓子パーティー。三度の飯より小動物をもふもふするのが好きです。