从ActiveRecord模型中删除属性

时间:2011-03-01 17:27:36

标签: ruby-on-rails ruby

我正在两个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'

任何人都可以提供任何指示吗?

3 个答案:

答案 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

然后该块保存正常。只是抛弃这个答案,以防其他人遇到类似的问题。