ruby 关于关联has_many的多级/三重嵌套表单

ruyhziif  于 2023-10-17  发布在  Ruby
关注(0)|答案(1)|浏览(92)

我有3个类ProductProductVariantComponent,我想应用一个三重嵌套形式,以便在调用Product视图时可以设置ProductProductVariantComponent的值。

型号

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,我不知道为什么。

bvpmtnay

bvpmtnay1#

您应该以与产品变量相同的方式传递组件参数,添加_attrbiutes后缀。
更改以下内容:

params.require(:product).permit(:name, product_variants_attributes: [:category, components: [:form]])

收件人:

params.require(:product).permit(:name, product_variants_attributes: [:category, components_attributes: [:form]])

https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html-一对多

相关问题