【问题标题】:Rails - Use the same form with new/edit using fields_forRails - 使用 fields_for 使用与 new/edit 相同的表单
【发布时间】:2012-05-31 09:01:16
【问题描述】:

我有 5 个模型,

  1. person_car
  2. 汽车(有很多轮胎)
  3. person_car_tire
  4. 轮胎(属于汽车)

所以我有这个观点 _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 %>

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

我怎样才能对两个动作使用相同的表单?

希望有人可以帮助我。

【问题讨论】:

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


    【解决方案1】:

    您可以对新建和编辑使用相同的 _form 部分。您只需要将设置为不同值的局部变量传递给此表单。基本上,无论有什么不同,都将其作为参数(局部变量)抽象到这个类似函数的部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-16
      • 2013-06-15
      相关资源
      最近更新 更多