我知道這裏有一堆類似的問題,但都沒有幫助我。Rails,accep_nested_attributes_for has_many:通過構建
我有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表的設計:
據我所知,我需要在產品模型中使用accept_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)
在我使用collection_select顯示option_types視圖new.html.erb:
<%= 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 %>
最後,在產品控制器的板條箱動作我必須允許也關聯屬性,如:
permited = params[:product].permit(product_option_types_attributes: [:option_type_id])
所以主要問題是,我是否設置了accepted_nested_attributes_for,b uild,collection_select和關聯是否正確?
+:當IM建築associoation與像參數:
@product.product_option_types.build(position: 1)
然後傳遞該信息(位置:1)來創建動作我必須在形式使用hidden_field?
對於你的第一個問題:好吧,它工作嗎?如果不是,會發生什麼呢?對於第二個問題,是的,你需要'hidden_field'來傳遞位置 - 或者如果它不會被修改,你可以簡單地在你的'create'動作而不是'new'中設置。 – janfoeh
這真的是個大問題嗎? – Srle