今日も、あれどうやるんだっけ? となってしまい、いつも忘れてしまうので、書いとこ。

Railsでは form_for ビューヘルパーを使用すれば、特定のモデルのHTMLフォーム要素の生成と、POSTされたデータからモデルを生成する処理が非常に楽になります。
 
def create_member
  m = Member.create(
    :email => params[:email], 
    :job => params[:job], 
    :sex => params[:sex])
end
こんな処理が、
def create_member
  m = Member.create(params[:member])
end
で済んでしまいます。
まあ、ここまでは別に問題ないのですが、例えばMemberの住所を別のモデルで定義している場合はどうすんだけっけ? と言うケースが多々有り、その都度忘れてるので調べ直してました。

まず、モデルの方に accepts_nested_attributes を宣言します。
これをやらないとネストした属性情報を受け取ってくれないようです。この場合だとMemberモデルがAddressモデルをもっているので、Memberモデルクラスに
accepts_nested_attributes_for :address, :allow_destroy => true
と宣言させて、
ビューの方は、
<% form_for @member do |f| %>
  email: <%= f.text_field :email %> <br/>
  job: <%= f.text_field :job %> <br/>
  sex: <%= f.text_field :sex %>
  <!-- ネストした住所情報 -->
  <% f.fields_for :address do |f2| %>
    都道府県: <%= f2.text_fieldf :prefecture %>
    市町村: <%= f2.tet_field :city %>
    .....そんな感じで
  <% end %>
<% end %>
fields_for を使えば良いわけですね。

これを知らないときは、結局form_forは使用せずに、自前で全部フィールド書いて、コントローラーでも一個ずつ設定してました。