У меня есть три модели: Customer
, Branch
и CustomerBranch
В модели клиента:
has_many :customer_branches, inverse_of: :customer
has_many :branches, through: :customer_branches
В модели филиала:
has_many :customer_branches, inverse_of: :branch, dependent: :restrict_with_exception
has_many :customers, through: :customer_branches
В модели CustomerBranch:
belongs_to :customer, inverse_of: :customer_branches
belongs_to :branch, inverse_of: :customer_branches
Это приложение только для API, и я получу массив идентификаторов филиалов.Теперь я хочу назначить / удалить ответвления от клиента на основе полученных идентификаторов.
У меня есть решение, чтобы справиться с этим, но я не думаю, что это лучший из возможных способов.Вот мое текущее решение:
attr_accessor :branches_ids
after_save :assign_branches
def assign_branches
return if self.branches_ids.nil?
old_branch_ids = self.branch_ids
remove_branch_ids = old_branch_ids - self.branches_ids
self.customer_branches.where(id: remove_branch_ids).delete_all if remove_branch_ids.present?
self.branches << Branch.where(id: self.branches_ids)
end
Есть ли лучший способ справиться с этим?Заранее спасибо !!