我想将两个配置文件合并为一个.在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
在一般化解决方案的情况下
放置文件/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)
有点凌乱,没有经过测试,但应该给你一个想法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。