通过simple_fields_for以简单形式使用嵌套字段时,表单字段重复

时间:2016-02-19 23:04:58

标签: ruby-on-rails ruby-on-rails-4 simple-form

我有一个表单,需要允许用户为多个位置组合和价格类型指定价格,这些组合与套件相关。

想想它“就Z的类型而言,此套件在Y位置的成本为X.”

所需的布局是将内容布置成页面显示:

位置A

  • 价格类型1的价格区域
  • 价格类型2的价格区域

位置B

  • 价格类型1的价格区域
  • 价格类型2的价格区域

位置C

  • 价格类型1的价格区域
  • 价格类型2的价格区域

要完成此操作,我的_form.html.erb视图中包含以下内容:

<h2>Pricing</h2>
<% @locations.each do |location| %>
  <h2><%= location.name %></h2>
  <div>
    <% @price_types.each do |price_type| %>
      <%= f.simple_fields_for :kit_pricings do |p| %>
        <% if f.object.new_record? %>
          <%= p.input :location_id, :as => :hidden, :input_html => { :value => location.id } %>
          <%= p.input :price_type_id, :as => :hidden, :input_html => { :value => price_type.id } %>
        <% end %>
        <%= p.input :price, :label => price_type.name %>
      <% end %>
    <% end %>
  </div>
<% end %>

迭代每个位置,然后在其中迭代每个价格类型,并为每个位置生成一个表单字段。这在创建新套件时非常有效。

然而,当你去编辑一个使用相同视图部分的工具包时,一切都会崩溃。

我最清楚的是,每次出现的<%= p.input :price, :label => price_type.name %>所有项目都与正在编辑的当前套件的kit_id相匹配。这导致页面上有大量重复的表单字段。

最有趣的部分是,如果您编辑并保存它,只要您编辑页面上的最后一组字段,它就能正常工作。

我确信我现在只是忽视了一些事情。

如果它有用,这就是我的控制器里面的内容:

  def new
    @kit = Kit.new
    @kit.kit_pricings.build
    @locations = Location.all
    @price_types = PriceType.all
  end

  def edit
    @locations = Location.all
    @price_types = PriceType.all
  end

套件型号

class Kit < ActiveRecord::Base
  has_many :kit_pricings
  has_many :locations, through: :kit_pricings
  has_many :price_types, through: :kit_pricings

  accepts_nested_attributes_for :kit_pricings, allow_destroy: true
end

Kit Pricings Model

class KitPricing < ActiveRecord::Base
  belongs_to :kit
  has_one :locations
  has_one :pricing_types
end

地点模型

class Location < ActiveRecord::Base
  belongs_to :kit_pricing
end

价格类型型号

class PriceType < ActiveRecord::Base
  belongs_to :kit_pricing
end

对此有任何帮助将不胜感激。

0 个答案:

没有答案