Rails - 使用fields_for与new / edit使用相同的表单

时间:2012-05-24 18:28:03

标签: ruby-on-rails ruby-on-rails-3 nested-attributes fields-for

我有5个型号,

  1. person_car
  2. 汽车(有很多轮胎)
  3. person_car_tire
  4. 轮胎(属于汽车)
  5. 所以我有这个观点 _form.html.erb

    <%= form_for(@person) do |f| %>
      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </div>
      <div>
    
      <% Car.all.each do |c|%>
      <div class="field">
        <%= f.fields_for(:person_cars) do |ff|%>
          Car Name:   <%= ff.check_box :car_id %>|<%= c.car_name%>
          <% c.tires.each do |b|%>
          <div class="field">
            <%= ff.fields_for(:person_car_tires) do |fff|%>
              Tire: <%#= fff.check_box :tire_id%>|<%= b.tire_name%>
            <%end%>
          </div>
          <%end%>
        <%end%>
      </div>
    
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
    

    当我保存它完美无缺时,问题出现在我想要使用此表单进行编辑时,因为它在视图中复制了每辆车的数据4次。我一直在搜索和字段允许额外的选项,所以我做了:

    <%= form_for(@person) do |f| %>
    
      <div class="field">
        <%= f.label :name %><br />
        <%= f.text_field :name %>
      </div>
      <div>
    
      <% @person.cars.each do |c|%>
      <div class="field">
        <%= f.fields_for(:person_cars, c) do |ff|%>
          Actividad:   <%= ff.check_box :car_id %> | <%= c.car.name%>
          <% c.person_car_tires.each do |t|%>
          <div class="field">
            <%= ff.fields_for(:person_car_tires, t) do |fff|%>
              Tarea: <%#= fff.check_box :tire_id%>|<%#= t.tire.name%>
            <%end%>
          </div>
          <%end%>
        <%end%>
      </div>
      <%end%>
    
      <div class="actions">
        <%= f.submit %>
      </div>
    <% end %>
    

    它现在有效,但只显示我在新动作中选择的汽车和轮胎。并非如我所愿(因为如果我使用第一个表单,它会复制视图中的复选框)。

    如何为这两种行为使用相同的表单?

    希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

您可以对new和edit使用相同的_form partial。您只需将设置为不同值的局部变量传递给此表单。基本上,无论有什么不同,都将它作为参数(局部变量)抽象为类似函数的部分。