QA@IT

Rails の accepted_nested_attributes_for の使い方

2807 PV

Rails の ActiveRecord に用意されている accepted_nested_attributes_for を使おうと思っています。

class User < ActiveRecord::Base
  attr_accessible :name
  has_many :items

  accepts_nested_attributes_for :items
end

このようなモデルと

<%= form_for(@user) do |f| %>
  <div class="field">
    <%= f.label :name %><br />
    <%= f.text_field :name %>
    <%= f.fields_for :items do |item| %>
      <%= item.label :name %><br />
      <%= item.text_field :name %>
    <% end %>  
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

このようなビューを使う時にコントローラを

  def new
    @user = User.new
    @user.items << Item.new

    respond_to do |format|
      format.html # new.html.erb
      format.json { render json: @user }
    end
  end

のように items に Item のインスタンスを入れなければビューの fields_for のフォームが表示されませんでした。元々こういうものだったのか記憶にないので、もしそうであればドキュメントのポインタを教えてください。

回答

そういうものです。ASCIIcasts の Nested Model Form Part 1 が参考になるでしょうか。

なんでこんな仕様になっているかというと、Part 2 のように JavaScript で動的にフォームを生成する場合、空のフィールドが出ていると逆に邪魔だからでしょうね。

編集 履歴 (0)
ウォッチ

この質問への回答やコメントをメールでお知らせします。