我把它放在我的迁移文件里面“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绝对不是空的。对于这段代码,第二个循环仍然没有打印出来。有什么想法吗?
答案 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:您可能想要使用交易。