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



给定:

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=(如果我更新Group,则ID=the_group_id)。我发现修复它的唯一方法是提取customers_attributes,然后在Group save!调用后单独进行Customer.where(id: [1,2]).update_all(group_id: 'groups_id')

其他人遇到这个吗?我觉得修复的方法是在customers_attributes中拥有一个像_existing: true这样的键(就像_destroy: true用于无效化外键一样)。还是这样的东西违反了我没有看到的铁轨原则?

实际上,您无需为此使用嵌套属性,而是可以直接设置Assicote_IDS属性:

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

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

相关内容

  • 没有找到相关文章

最新更新