我有3个类Product
,ProductVariant
,Component
,我想应用一个三重嵌套形式,以便在调用Product视图时可以设置Product
,ProductVariant
和Component
的值。
型号
class Product < ApplicationRecord
has_many :product_variants
accepts_nested_attributes_for :product_variants
end
class ProductVariant < ApplicationRecord
has_many :components
accepts_nested_attributes_for :components
end
class Component < ApplicationRecord
end
产品控制器
# GET /products/new
def new
@product = Product.new
@product.product_variants.build.components.build
end
# POST /products or /products.json
def create
@product = Product.new(product_params)
respond_to do |format|
if @product.save
...
end
...
end
end
...
def product_params
params.require(:product).permit(:name, product_variants_attributes: [:category, components: [:form]])
end
end
产品视图
<%= form_with(model: product) do |form| %>
...
<div>
<%= form.label :name, style: "display: block" %>
<%= form.text_field :name %>
</div>
<%= form.fields_for :product_variant do |va| %>
<%= va.label :category, style: "display: block" %>
<%= va.text_field :category %>
<%= va.fields_for :components do |co| %>
<%= co.label :form, style: "display: block" %>
<%= co.text_field :form %>
<% end %>
<% end %>
<div>
<%= form.submit %>
</div>
<% end %>
可以初始化并保存对象ProductVariant,但对于Component,我得到Unpermitted parameter: :components_attributes
,我不知道为什么。
1条答案
按热度按时间bvpmtnay1#
您应该以与产品变量相同的方式传递组件参数,添加
_attrbiutes
后缀。更改以下内容:
收件人:
https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html-一对多