0

我把它放在“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 绝对不是空的。对于这段代码,第二个循环仍然没有输出任何内容。任何想法?

4

1 回答 1

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:您可能想要使用事务。

于 2012-04-30T22:45:13.977 回答