我有两个模型,其中一个是多态的,第二个是“父”模型:
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,因此它会创建一个新的 ID,而不是更新现有的 ID。