我有一个表单,需要允许用户为多个位置组合和价格类型指定价格,这些组合与套件相关。
想想它“就Z的类型而言,此套件在Y位置的成本为X.”
所需的布局是将内容布置成页面显示:
位置A
位置B
位置C
要完成此操作,我的_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
对此有任何帮助将不胜感激。