我正在两个activerecord连接之间迁移数据,我已经正确设置了我的模型,所以我可以从Legacy :: Tablename和Tablename中读取并将其插入到新表中。
我遇到的问题是我的新模型没有遗留模型中的所有属性,所以当我尝试通过新模型创建记录时,我得到一个'未知属性';
legacy_users = Legacy::User.all
legacy_users.each do |legacy_user|
User.create legacy_user.attributes
end
但是,如果我尝试删除有问题的属性,它仍然无效,例如。
legacy_user.attributes.delete 'some_attribute'
任何人都可以提供任何指示吗?
答案 0 :(得分:11)
attributes.except(:some_attribute)怎么样?
答案 1 :(得分:1)
这应该适用于那种情况:
legacy_users = Legacy::User.all
legacy_users.each do |legacy_user|
u = User.new
u.attributes.each do |k, v|
old_val = legacy_user.send(k) # Get the attr from old user
u.send("#{k}=", old_val) # Set it to the new user
end
end
您也不需要经历删除每个未使用的属性的混乱
答案 2 :(得分:0)
我也正在进行迁移,在我的情况下,我将一个块传递给first_or_create
来克隆对象。我无法让delete()
或except()
工作,但出于某种原因,这有效:
scrubbed_obj = my_obj.attributes.reject { |k,v| k == 'the_attribute_you_dont_want' }
new_object.attributes = scrubbed_obj
然后该块保存正常。只是抛弃这个答案,以防其他人遇到类似的问题。