鉴于:
class Group < ApplicationRecord
has_many :customers, inverse_of: :group
accepts_nested_attributes_for :customers, allow_destroy: true
end
class Customer < ApplicationRecord
belongs_to :group, inverse_of: :customers
end
我想创建/更新一个组并将现有客户分配给该组,例如:
Group.new(customers_attributes: [{ id: 1 }, { id: 2 }])
这不起作用,因为Rails只会抛出ActiveRecord::RecordNotFound: Couldn't find Customer with ID=1 for Group with ID=
(或ID=the_group_id
,如果我正在更新Group
)。我发现修复它的唯一方法就是提取customers_attributes
,然后在Customer.where(id: [1,2]).update_all(group_id: 'groups_id')
Group
调用之后单独执行save!
。
有人遇到过这个吗?我觉得修复它的方法是在_existing: true
中使用像customers_attributes
这样的键(很像_destroy: true
用来使外键无效)可以工作。或者这样的事情是否违反了我没有看到的Rails原则?
实际上,您不需要为此使用嵌套属性,您可以直接设置association_ids属性:
Group.new(customer_ids: [1, 2])
保存记录时,这将自动更新每个引用的Customer上的group_id。