Точно такая же форма Кокон на другой модели посылает другим параматерам - PullRequest
0 голосов
/ 27 июня 2019

Я использую камень кокона для формы вложенных атрибутов, в данном случае 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"

1 Ответ

2 голосов
/ 01 июля 2019

Звучит так, как будто вам не хватает accepts_nested_attributes_for :contract_links в Project.

Метод accepts_nested_attributes_for добавляет / определяет метод contract_links_attributes, а fields_for использует этот метод / index-keyтолько если это доступно.

Также см. https://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

...