Rails:为现有的has_many记录创建/更新has_many关系

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

鉴于:

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原则?

ruby-on-rails ruby has-many
1个回答
0
投票

实际上,您不需要为此使用嵌套属性,您可以直接设置association_ids属性:

Group.new(customer_ids: [1, 2])

保存记录时,这将自动更新每个引用的Customer上的group_id。

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