ruby-on-rails – 在轨道中合并两个/三个记录
发布时间:2020-12-17 03:22:30 所属栏目:百科 来源:网络整理
导读:我想将两个配置文件合并为一个.在Rails中执行此操作的最佳方法是什么. 我有两个配置文件说user1和user2,并且至少有30个表与它们相关联. 现在我想将它们合并在一起,以便应该有一个配置文件说user1和user2应该被删除但是user2的所有关联数据现在应该与user1关
我想将两个配置文件合并为一个.在Rails中执行此操作的最佳方法是什么.
我有两个配置文件说user1和user2,并且至少有30个表与它们相关联. 现在我想将它们合并在一起,以便应该有一个配置文件说user1和user2应该被删除但是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 在一般化解决方案的情况下 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) 有点凌乱,没有经过测试,但应该给你一个想法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |