迁移数据未保存

时间:2012-04-30 20:36:50

标签: ruby-on-rails ruby migration

我把它放在我的迁移文件里面“def up)”

User.find(:all).each do |user|
    user.login = user.name
    user.save
end 
User.find(:all).each do |user|
    puts user.login
end 

我知道user.name绝对不是空的。对于这段代码,第二个循环仍然没有打印出来。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

由于验证错误,用户可能尚未保存。

如果不想处理验证错误,则应使用bang版本保存(user.save!)。这意味着你会收到错误。

要防止验证,您可以在迁移中定义模型。

class CopyUserNameToLogin < ActiveRecord::Migration

  class User < ActiveRecord::Base
  end

  def up
    User.find_each do |user|
      user.login = user.name
      user.save!
    end
  end

  def down
    raise ActiveRecord::IrreversibleMigration
  end

end

提示:使用find_each批量获取用户,这将减少内存使用量。

提示2:您可能想要使用交易。