其他模型上完全相同的 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 发送。这当然会导致不允许的参数错误。那么为什么完全相同的表单部分发送不同的参数值?

这是 ProjectProjectuser 的形式:

    = 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