【发布时间】:2017-08-30 15:09:05
【问题描述】:
我正在尝试将一条记录“合并”到另一条记录及其所有关系子项中。
例如:
我有vendor1 和vendor2,它们都有许多包含其他has_many 的关系。例如,一个供应商有很多 purchase_orders,一个采购订单有很多ordered_items,一个ordered_item 有很多receed_items。
如果我将vendor2 的名称更改为与vendor1 的名称相同,那么我想销毁vendor2,但将其所有has_many 移至vendor1。
这是我一直在尝试做的:
def vendor_merge(main_vendor, merge_vendor)
relationships = [
merge_vendor.returns, merge_vendor.receiving_and_bills,
merge_vendor.bills, merge_vendor.purchase_orders, merge_vendor.taxes,
Check.where(payee_id: merge_vendor.id, payee_type: "Vendor"),
JournalEntryAccount.where(payee_id: merge_vendor.id)
]
relationships.each do |relationship|
class_name = relationship.class.name
relationship.each do |r|
if class_name === "Check"
r.update(payee_id: main_vendor.id)
else
r.update(vendor_id: main_vendor.id)
end
r.save
end
relationship.delete_all
end
merge_vendor.destroy
end
这样做会给我带来约束错误,因为 has_many 的 has_many 和 has_many through: :ect...
有什么直接的解决方案吗?
【问题讨论】:
-
你遇到了什么约束问题?
-
您说要将
vendor2的名称更改为与vendor1的名称相同,但是您还要删除vendor2对吗?因此,您不再需要更改名称,因为无论如何它都会被删除。此外,我认为这就是您所指的“约束问题”:您对“名称”列具有唯一性约束。 -
@Jay-ArPolidario 名称更改等于
vendor1是触发“合并”的条件 -
您对供应商名称有唯一性约束吗?您能否向我们展示您的 Vendor 模型中的所有验证?
-
@moveson 约束与属于购买的购买项目有关。该名称与问题无关。
标签: mysql ruby-on-rails ruby ruby-on-rails-4