【发布时间】:2019-03-07 12:52:53
【问题描述】:
给定:
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,然后在Groupsave! 调用之后执行单独的Customer.where(id: [1,2]).update_all(group_id: 'groups_id')。
还有其他人遇到过这个吗?我觉得解决它的一种方法是在customers_attributes 内有一个像_existing: true 这样的键(很像_destroy: true 用于使外键无效)可以工作。或者这样的事情是否违反了我没有看到的 Rails 原则?
【问题讨论】:
标签: ruby-on-rails ruby has-many