在Rails表单中显示嵌套属性的更好方法

时间:2019-05-03 10:05:45

标签: ruby-on-rails ruby-on-rails-5

我只需要显示四个optionsquestions。目前,我将代码重复四次。我相信,有更好的方法可以做到这一点。你能告诉我如何吗?

表格

<%= form_for @question do |form| %>
  <div class="field">
    <%= form.label :body %>
    <%= form.text_area :body %>
  </div>

  <%= form.fields_for :options, question.options.build do |a| %>
    <div class="field">
      <%= a.label :options %>
      <%= a.text_area :body %>
      <%= a.check_box :is_answer, checked: true %>
    </div>
  <% end %> 

  <%= form.fields_for :options, question.options.build do |a| %>
    <div class="field">
      <%= a.label :options %>
      <%= a.text_area :body %>
      <%= a.check_box :is_answer, checked: true %>
    </div>
  <% end %>

  <%= form.fields_for :options, question.options.build do |a| %>
    <div class="field">
      <%= a.label :options %>
      <%= a.text_area :body %>
      <%= a.check_box :is_answer, checked: true %>
    </div>
  <% end %>

  <%= form.fields_for :options, question.options.build do |a| %>
    <div class="field">
      <%= a.label :options %>
      <%= a.text_area :body %>
      <%= a.check_box :is_answer, checked: true %>
    </div>
  <% end %>

  <div class="actions">
    <%= form.submit %>
  </div>
<% end %> 

在这里,我将重复:options的代码块四次。如何在一个块中完成?

1 个答案:

答案 0 :(得分:0)

您可以在控制器中做

def create
  @question = Question.new
  4.times { @question.options.build } 
end

然后在您看来

<%= form_for @question do |form| %>
  <div class="field">
    <%= form.label :body %>
    <%= form.text_area :body %>
  </div>

  <%= form.fields_for :options, question.options.build do |a| %>
    <div class="field">
      <%= a.label :options %>
      <%= a.text_area :body %>
      <%= a.check_box :is_answer, checked: true %>
    </div>
  <% end %> 
<% end %>

应该为您构建4个嵌套字段,因此您不必重复多次代码:D