Sal*_*lil 5 merge ruby-on-rails merging-data ruby-on-rails-3
我想将两个配置文件合并为一个.在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
Run Code Online (Sandbox Code Playgroud)
在概括解决方案放置文件/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
Run Code Online (Sandbox Code Playgroud)
如何使用
User < ActiveRecord::Base
has_many ...
acts_as_user_merge
end
@user1.merge(@user2)
Run Code Online (Sandbox Code Playgroud)
有点凌乱,没有经过测试,但应该给你一个想法
| 归档时间: |
|
| 查看次数: |
2396 次 |
| 最近记录: |