其他模型上完全相同的 Cocoon 形式发送其他参数
Exact same Cocoon form on other model sends other paramaters
我将 cocoon gem 用于嵌套属性表单,在本例中为 Projectuser
has_many ContractLinks
。这一切工作正常,当我添加合同时,它发送表单参数为 contract_links_attributes
:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "projectuser"=>{"project_id"=>"538", "user_id"=>"56", "contract_links_attributes"=>{"description"=>"test", "contract_link"=>"test"}, "commit"=>"Save"}
现在我也想要一个 Project
has_many ContractLinks
,所以我将关系更改为多态的。这仍然适用于 Projectuser
,但不适用于 Project
。我重复使用了完全相同的部分表单,但不是将表单参数作为 contract_links_attributes
发送,而是将其作为 contract_links
发送。这当然会导致不允许的参数错误。那么为什么完全相同的表单部分发送不同的参数值?
这是 Project
和 Projectuser
的形式:
= f.fields_for(:contract_links) do |contract_link|
= render "contract_link_fields", f: contract_link
这是contract_link_fields
:
%tr.contract
%td= f.date_select :contract_date, include_blank: true, start_year: 10.year.ago.year
%td= f.text_field :description, class: "input-xlarge"
%td= f.text_field :contract_link, class: "input-xlarge"
这听起来好像您缺少 Project
中的 accepts_nested_attributes_for :contract_links
。
accepts_nested_attributes_for
方法adds/definescontract_links_attributes
方法,fields_for
仅在可用时使用此method/index-key。
另见 https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html
我将 cocoon gem 用于嵌套属性表单,在本例中为 Projectuser
has_many ContractLinks
。这一切工作正常,当我添加合同时,它发送表单参数为 contract_links_attributes
:
Parameters: {"utf8"=>"✓", "authenticity_token"=>"[FILTERED]", "projectuser"=>{"project_id"=>"538", "user_id"=>"56", "contract_links_attributes"=>{"description"=>"test", "contract_link"=>"test"}, "commit"=>"Save"}
现在我也想要一个 Project
has_many ContractLinks
,所以我将关系更改为多态的。这仍然适用于 Projectuser
,但不适用于 Project
。我重复使用了完全相同的部分表单,但不是将表单参数作为 contract_links_attributes
发送,而是将其作为 contract_links
发送。这当然会导致不允许的参数错误。那么为什么完全相同的表单部分发送不同的参数值?
这是 Project
和 Projectuser
的形式:
= f.fields_for(:contract_links) do |contract_link|
= render "contract_link_fields", f: contract_link
这是contract_link_fields
:
%tr.contract
%td= f.date_select :contract_date, include_blank: true, start_year: 10.year.ago.year
%td= f.text_field :description, class: "input-xlarge"
%td= f.text_field :contract_link, class: "input-xlarge"
这听起来好像您缺少 Project
中的 accepts_nested_attributes_for :contract_links
。
accepts_nested_attributes_for
方法adds/definescontract_links_attributes
方法,fields_for
仅在可用时使用此method/index-key。
另见 https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html