gpt4 book ai didi

ruby-on-rails - 在rails中合并两个/三个记录

转载 作者:行者123 更新时间:2023-12-04 06:05:00 25 4
gpt4 key购买 nike

我想将两个配置文件合并为一个。在 Rails 中执行此操作的最佳方法是什么。

我有两个配置文件说 user1user2并且至少有 30 个表与它们相关联。

现在我要 将它们合并在一起 所以应该有一个配置文件说 user1user2应该被删除 但是 user2的所有关联数据现在应该关联 user1 .

例如:假设 user2有两个联系人和 user1合并用户后有3个联系人user1应该有5个联系人。

最佳答案

像这样的东西

@user1 = User.find(1);
@user2 = User.find(2);

Contact.where("user_id = ?", @user2.id).update_all(:user_id => @user1.id)
@user2.destroy

在泛化解决方案的情况下
放置文件/lib/acts_as_user_merge.rb
module UserMerge
module ActsAsUserMerge
module Base
def self.included(klass)
klass.class_eval do
extend Config
end
end
end

module Config
def acts_as_user_merge
include ::UserMerge::ActsAsUserMerge::InstanceMethods
end
end

module InstanceMethods
def merge(user)
models = Array.new
models_names = User.reflections.collect{|a, b| b.class_name if b.macro==:has_many}.compact
models_names.each do |name|
models << Object.const_get name
end
models.each do |model|
model.where("user_id = ?", user.id).update_all(:user_id => self.id)
end
user.destroy
end
end
end
end

::ActiveRecord::Base.send :include, ::UserMerge::ActsAsUserMerge::Base

如何使用
User < ActiveRecord::Base
has_many ...

acts_as_user_merge

end

@user1.merge(@user2)

有点乱,没有经过测试,但应该给你一个想法

关于ruby-on-rails - 在rails中合并两个/三个记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14040905/

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