Точная форма кокона на другой модели отправляет другие параметры

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

person John    schedule 27.06.2019    source источник
comment
Вы можете показать нам определение ассоциации для обеих моделей? Полагаю, вам не хватает accepts_nested_attributes_for ion Project?   -  person nathanvda    schedule 28.06.2019
comment
Вы правы, совсем забыл добавить accepts_nested_attributes_for, спасибо! Если вы добавите это в качестве ответа, я отдам вам за это должное.   -  person John    schedule 01.07.2019


Ответы (1)


Похоже, вам не хватает accepts_nested_attributes_for :contract_links в Project.

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

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

person nathanvda    schedule 01.07.2019