这是我的迁移:
class Avatar < ActiveRecord::Base
end
def self.up
add_column :users, :featured, :boolean, :default => false, :null => false
User.reset_column_information
Avatar.all.each do |a|
user = User.find(a.user_id)
user.featured = a.featured
user.save
end
drop_table :avatars
end
由于某些原因,当它运行时,feature属性不会被保存。如果我从控制台运行它,它没有问题。
我注意到的另一个奇怪的事情是,如果我在列重置后使迁移失败,然后修复它以使其完成,那么当我重新运行它时它会起作用。
当上面的代码第一次运行时,这是日志输出......
Migrating to MoveAvatarsToProfile (20101216003815)
** ActionMailerWithRequest: initialized properly
[1m[36mSQL (0.5ms)[0m [1m SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[0m
[1m[35mSQL (0.4ms)[0m SELECT name
FROM sqlite_master
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
[1m[36mSQL (0.3ms)[0m [1mSELECT "schema_migrations"."version" FROM "schema_migrations"[0m
任何想法?
答案 0 :(得分:0)
这是一种结束,但运行这样的事情应该快得多:
User.execute("UPDATE users
SET users.featured = avatars.featured
WHERE users.id = avatars.user_id")
这并不能解释您所看到的奇怪行为,但如果您拥有大量用户,则应该证明它的速度要快得多(并且RAM密集度较低)。