gpt4 book ai didi

ruby-on-rails - Rails 5.更新与异常处理的关联

转载 作者:太空宇宙 更新时间:2023-11-03 16:42:17 26 4
gpt4 key购买 nike

我在类 P(父级)和 C(子级)之间有一个一对多的关系。

C 有一个唯一的复合索引 {p_id, somerow}

有 2 个类 P 的对象(p1p2),我想将它们合并为一个,通过p2.childs.update_all (parent: p1),但是我得到了事务的回滚,因为复合索引的唯一性被破坏了。但是,从内部逻辑来看,这种情况并不是错误,必须销毁重复条目,而不是更改父条目。

解决问题最正确的方法是什么?

附言对数据库的请求数量很关键。

附言关系中的 child 数可以超过 1k 条记录中的值。

最佳答案

如果您准备好通过 Rails 验证记录,这意味着执行单独的查询来验证每条记录,这里有一个简单的方法:

class C < ActiveRecord::Base
validates_uniqueness_of :somerow, scope: :p_id

belongs_to :p
end

class P < ActiveRecord::Base
has_many :childs

def merge_sibling(p2)
p2.childs.each do |c|
c.p_id = self.id
c.valid? ? c.save : c.destroy
end
p2.destroy
end
end

p1.merge_sibling p2

关于ruby-on-rails - Rails 5.更新与异常处理的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43733257/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com