预期的ProductField,有阵列问题

the*_*he_ 8 ruby ruby-on-rails params

我有一个rails 4应用程序,它有一个params块,看起来像:

def store_params
   params.require(:store).permit(:name, :description, :user_id, products_attributes: [:id, :type, { productFields: [:type, :content ] } ])
end
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误:

ActiveRecord::AssociationTypeMismatch in StoresController#create
ProductField expected, got Array
Run Code Online (Sandbox Code Playgroud)

我试图插入的参数如下:

Parameters: {"utf8"=>"?", "store"=>{"name"=>"fdsaf", "description"=>"sdfd","products_attributes"=>{"0"=>{"productFields"=>{"type"=>"", "content"=>""}}}}, "type"=>"Magazine", "commit"=>"Create store"}
Run Code Online (Sandbox Code Playgroud)

我的模特是

  1. 商店(有has_many :products)
  2. 产品(有has_many :productFields和belongs_to :store)
  3. ProductField(有一个belongs_to :product)

我的观点如下:

<%= f.fields_for :products do |builder| %>
  <%= render 'product_fields', f: builder %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

然后product_fields部分:

<%= f.fields_for :productFields do |builder| %>
  <%= builder.text_field :type%>
  <%= builder.text_area :content %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

1an*_*ock 8

确保您的产品和商店模型具有:

accepts_nested_attributes_for
Run Code Online (Sandbox Code Playgroud)

在他们里面.

然后,如果您调用嵌套的fields_for,请确保构建它们(在控制器中),例如:

product = @store.products.build
product.productFields.build
Run Code Online (Sandbox Code Playgroud)