Учитывая:
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, которого я не вижу?