如何在#34; fields_for"中访问新构建的实例?

时间:2017-06-23 07:32:09

标签: ruby-on-rails

我正在按照此http://railscasts.com/episodes/196-nested-model-form-part-1创建嵌套模型的表单。

链接中的示例是Survey模型有3个问题。每个Question有4个答案。我在这里复制了示例,但删除了Answer模型以使其更简单。

因此surveys_controller的{​​{1}}方法看起来像这样。

new
<{1>}中的

,我们有:

# surveys_controller.rb
def new
  @survey = Survey.new
  3.times do
    question = @survey.questions.build
  end
end

最后这是views/surveys/_form.html.erb

<%= form_for @survey do |f| %>
  <%= f.error_messages %>
  <p>
    <%= f.label :name %><br />
    <%= f.text_field :name %>
  </p>
  <%= f.fields_for :questions do |builder| %>
    <%= render "question_fields", :f => builder %>
  <% end %>
  <p><%= f.submit "Submit" %></p>
<% end %>

我的问题是,如果我在上述views/surveys/_question_fields.html.erb方法中设置了每个<p> <%= f.label :content, "Question" %><br /> <%= f.text_area :content, :rows => 3 %><br /> <%= f.check_box :_destroy %> <%= f.label :_destroy, "Remove Question" %> </p> 的属性,我该如何在视图中显示该值。

我们说我将question修改为:

new

如何在surveys_controller.rb# surveys_controller.rb def new @survey = Survey.new 3.times do question = @survey.questions.build question.another_attribute = another_value # added line end end 内显示question.another_attribute的价值?

1 个答案:

答案 0 :(得分:1)

您正在将:f => builder传递给部分内容,因此您可以使用f。调用f.object应该返回表单的对象,在这种情况下是一个问题。所以以下内容应该有效:

<%= f.object.another_attribute %>