在A模型的视图形式内处理B模型

时间:2015-01-07 10:58:52

标签: ruby-on-rails nested-forms

我有一个经典的form_for

<div class="field">
    <%= f.label "Modèle" %>
    <%= f.text_field :model, required: true %>
  </div>
  <div class="field">
    <%= f.label "Immatriculation" %>
    <%= f.text_field :license_plate, required: true %>
  </div>
  <div class="field">
    <%= f.label "Complément" %>
    <%= f.text_field :complement, required: true%>
  </div>
  <div class="field">
    <%= f.label "Puissance CV" %>
    <%= f.number_field :horse_power, required: true %>
  </div>
  <div class="field">
    <%= f.label "Indemnité KM" %>
    <%= f.number_field :km_compensation, required: true%>
  </div>

<div class="actions">
<%= f.submit 'Sauvegarder' %>
</div>

我想在此视图中使用另一个模型,当用户单击提交按钮时,该模型也会更新。我知道这与nested forms有关,但我对如何实现它有点困惑。这是我要添加的第二个模型中的变量:

<% @trip_distances.each do |t| %>
  <%= form_for(t) do |e| %>
      <div class="field">
        <%= e.text_field t.id_contract %>
        <%= e.number_field t.length %>
      </div>
 <% end %>

显然这不正确。我想我需要使用field_for方法?

1 个答案:

答案 0 :(得分:0)

首先,考虑使用simple_form gem,因为它清理了一些代码,并且整体上更适合开发人员:)

然后在您的视图中,您将拥有类似

的内容
<%= simple_form_for sth do |form| %>
  <% form.input :attributeUno %>
  <% form.input :length %>
 ...

然后添加到此表单输入嵌套元素添加simple_fields_for

<% @trip_distances.each do |t|
  <%= form.simple_fields_for t do |fields| %>
    <% fields.input :length %>
    ...

不要忘记添加

模型中的

accepts_nested_attributes_for :something:)

PS:你还应该考虑使用slimhaml来简化创建视图,并清理它们:)