这应该是一个简单的问题,但它让我抓狂了!
我有一个迁移(migration),我想在之后更新一条记录。
class SubjectsTextField < ActiveRecord::Migration
def self.up
add_column :users, :subjects, :text
User.find(39).update_attribute :subjects, "hey there"
end
def self.down
remove_column :users, :subjects
end
end
列被创建了,但当我去检查记录39时,它的subjects字段是空的,没有显示“hey there”。在迁移过程中没有抛出任何错误,而update_attribute行返回true,就像它已经起作用一样。
这行代码在控制台中完美地工作,且具有预期效果:
User.find(39).update_attribute :subjects, "hey there"
我尝试将update_attribute行放在第二个迁移中。如果我在一个 "rake db:migrate" 命令中顺序执行两个迁移,一直到当前版本,它仍然不起作用。
但是这里有奇怪的部分。如果我运行两个单独的迁移,比如先运行 "rake db:migrate VERSION=10" 来创建列,然后再运行第二个迁移 "rake db:migrate" 来更新属性,那么它就能工作!
到底是怎么回事……在迁移过程中如何修改记录?我记得以前经常这样做。也许这和 Rails 2.3.2 有所不同?
谢谢! Brian