私は、R Bates がネストされたフォームを作成する Railscast 196 に従っています。彼は、質問モデルとの has_many 関連付けを持つ調査モデルを持っています。Survey は、_nested_attributes_for :questions も受け入れます。surveys_controller の新しいアクションで、彼は次のようにして、調査フォームに 3 つの質問フィールドを作成します。
def new
@survey = Survey.new
3.times { @survey.questions.build }
end
form_for @survey の内部には、フォームに質問フィールドを作成するための次のものがあります。
<% f.fields_for :questions do |builder| %>
<p>
<%= builder.label :content, "Question" %><br />
<%= builder.text_area :content, :rows => 3 %>
</p>
ビデオでは、新しい調査をクリックすると、3 つの質問フィールドが (フォームの他の要素と共に) 表示されます。フォームの質問関連の要素が表示されません。このエピソードは Rails 3 がリリースされる前に作成したと思うので、何かが変わったのかもしれませんが、3.times (@survey.questions.build) を実行した結果が表示されないこと以外はわかりません。
モデル
class Survey < ActiveRecord::Base
attr_accessible :name
has_many :questions, :dependent => :destroy
accepts_nested_attributes_for :questions
end
形
<%= form_for @survey do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :name %><br />
<%= f.text_field :name %>
</p>
<% f.fields_for :questions do |builder| %>
<p>
<%= builder.label :content, "Question" %><br />
<%= builder.text_area :content, :rows => 3 %>
</p>
<% end %>
<p><%= f.submit %></p>
<% end %>
htmlフォーム
<form accept-charset="UTF-8" action="/surveys" class="new_survey" id="new_survey" method="post"><div style="margin:0;padding:0;display:inline"><input name="utf8" type="hidden" value="✓"><input name="authenticity_token" type="hidden" value="AWvA3/JpixF0C3sO8OzA5mMGsJzknvu99eovYv7M78E="></div>
<p>
<label for="survey_name">Name</label><br />
<input id="survey_name" name="survey[name]" size="30" type="text">
</p>
<p><input name="commit" type="submit" value="Create Survey"></p>
</form>
アップデート
フォーム内に、これを追加しました
<%= @survey.questions %>
そしてそれはこれを示しています
[#<Question id: nil, survey_id: nil, content: nil, created_at: nil, updated_at: nil>, #<Question id: nil, survey_id: nil, content: nil, created_at: nil, updated_at: nil>, #<Question id: nil, survey_id: nil, content: nil, created_at: nil, updated_at: nil>]
そのため、Surveyコントローラーの新しいアクションの3.timesは明らかに機能していますが、何らかの理由でフィールドが表示されません
<% f.fields_for :questions do |builder| %>
<p>
<%= builder.label :content, "Question" %><br />
<%= builder.text_area :content, :rows => 3 %>
</p>