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

Models

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

Product's controller

 # 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

Product's view

<%= 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,但我不知道为什么.

推荐答案

您应该以与产品变量相同的方式传递组件参数,添加_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对多

Ruby-on-rails相关问答推荐

Ruby on rails Admin-有没有一种方法可以在成对的管理控制器类中合并、重用应用程序控制器类?

Puma 工作人员无法在 Ubuntu 20.04 VM 上的 Rails 5.2 中启动

如何从数组中提取值

Sweet Alert 2 在 Rails 7 应用程序中无法正常工作

你如何发布到 Capybara 中的 URL?

Rails 中的转义值(类似于 mysql_real_escape_string())

在 Rails 中找不到关联问题

Rails 和 OS X:如何安装 rmagick?

Rails 服务对象与 lib 类

在 Windows 上安装特定的 Ruby on Rails 版本

如何独立测试模型的回调方法?

Rails:在 lib 目录中记录代码?

可以在 Rails/ActiveRecord 中使用 NULL 指定唯一索引吗?

如何在特定时区(最好是我的应用程序的默认时区,而不是 UTC)中创建新的 DateTime 对象?

如何将变量 link_to 定义为外部 URL

如何从邮箱中获取域

Rails Associations - has_many => :through - 但相同的模型

Rails Devise:设置密码重置令牌并重定向用户

如何为模型添加属性?

如何覆盖:在 has_many 中定义的顺序