3

私は、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="&#x2713;"><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>
4

1 に答える 1

3

最初に投稿したときに見るべきでした。とにかく、あなたはあなたに欠け=ていますfields_for。それはあるべきです

<%= f.fields_for :questions do |builder| %>
于 2013-02-18T03:10:11.750 に答える