У меня есть две модели: одна из них полиморфная, а вторая - «родительская»:
class Person
has_one :asset, as: :assetable
accepts_nested_attributes_for :asset
end
class Asset
belongs_to :assetable, class_name: Asset.name, polymorphic: true
end
И после сохранения следующей формы:
<% form_with model: @person do |f| %>
<% f.fields_for :asset do |ff| %>
<%= ff.text_field :name %>
<% end %>
<% end %>
Связанный объект Asset
не обновляется, а вместо этого создается новая копия Asset
с заданным name
и переназначается объекту Person
. Почему это происходит и как это сделать правильно?
Я использую Rails 7.1.3 и Asset
использую STI, если это что-то меняет.
Вы должны установить параметр update_only: true
для объявления accepts_nested_attributes_for
:
accepts_nested_attributes_for :asset, update_only: true
В противном случае, поскольку вы не передаете идентификатор актива в форме, он создает новый вместо обновления уже существующего.
Спасибо! Я временно решил эту проблему, разрешив id
в разрешенных параметрах, что было далеко от идеала, но я никогда не использовал эту настройку update_only, и теперь она работает как шарм. Спасибо! :)
На самом деле вам не хватает информации о связанном активе в полях field_for. guides.rubyonrails.org/form_helpers.html#the-fields-for-helper <% f.fields_for :asset, @person.asset do |ff| %>