我把它放在“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 绝对不是空的。对于这段代码,第二个循环仍然没有输出任何内容。任何想法?
我把它放在“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 绝对不是空的。对于这段代码,第二个循环仍然没有输出任何内容。任何想法?
由于验证错误,用户可能尚未保存。
如果不想处理验证错误,则应使用 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:您可能想要使用事务。