保存关联的多态对象会复制它

问题描述 投票:0回答:1

我有两个模型,其中一个是多态的,第二个是“父”模型:

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。

ruby-on-rails ruby rails-activerecord
1个回答
1
投票

您应该为

update_only: true
声明设置
accepts_nested_attributes_for
参数:

accepts_nested_attributes_for :asset, update_only: true

否则,由于您没有以表单传递资产的 ID,因此它会创建一个新的 ID,而不是更新现有的 ID。

© www.soinside.com 2019 - 2024. All rights reserved.