我知道这里有很多类似的问题,但都没有帮助我。
我有3个型号:
class Product < ActiveRecord::Base
has_many :product_option_types
has_many :option_types, through: :product_option_types
end
class OptionType < ActiveRecord::Base
has_many :product_option_types
has_many :products, through: :product_option_types
end
class ProductOptionType < ActiveRecord::Base
belongs_to :product
belongs_to :option_type
end
表OptionType预定义如下:
现在,在创建新产品时,我还需要使用product_id和option_type id填充表product_option_types:这是product_option_types表的设计:
据我所知,我需要在产品型号中使用accepts_nested_attributes_for来引用product_option_types,因此在产品型号中我需要关注?
accepts_nested_attributes_for :product_option_types, allow_destroy: true
在渲染new.html.erb之前,我需要按以下方式构建product_option_types ?
@product = Product.new
@product.product_option_types.build(position: 1)
在视图new.html.erb中我使用collection_select显示option_types:
<%= f.fields_for :product_option_types do |builder| %>
<%= builder.label :option_type_id, "Options" %>
<%= builder.collection_select :option_type_id, OptionType.all(order: 'name ASC'),
:id, :name, { prompt: "Select option..."} %>
<% end %>
最后在产品控制器的crate动作中,我还必须允许关联属性,如:
permited = params[:product].permit(product_option_types_attributes: [:option_type_id])
所以主要问题是,我是否正确设置了accepts_nested_attributes_for,build,collection_select和association?
+:当我用以下参数建立联合时:
@product.product_option_types.build(position: 1)
然后传递该信息(位置:1)来创建动作我必须在表单中使用hidden_field吗?
答案 0 :(得分:0)
根据我的理解,您感兴趣的数据是OptionType。 那么为什么不使用数据而不是关系。
Product.first.option_types
比关系表更有趣。
从product_option_types更改为option_types。