Rails不允许我在迁移期间更改记录

Bri*_*ong 19 migration ruby-on-rails

这一定是简单的事情,但它让我疯了!
我有一个迁移,我想在之后更新记录

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
Run Code Online (Sandbox Code Playgroud)

列被创建但是当我去检查记录39时,它的subject字段为空并且不说"嘿那里".迁移期间不会抛出任何错误,update_attribute行返回true,就像它已经工作一样.

此行在控制台中完美运行并具有预期效果:

User.find(39).update_attribute :subjects, "hey there"
Run Code Online (Sandbox Code Playgroud)

我尝试在第二次迁移中放入update_attribute行.如果我在一个"rake db:migrate"中将它们一直吹到当前,它仍然不起作用.

但这是奇怪的部分.如果我运行两次单独的迁移,请说"rake db:migrate VERSION = 10"只创建列,然后第二次使用"rake db:migrate"来更新属性IT WORKS!

到底是怎么回事......如何在迁移过程中修改记录?我似乎记得在过去经常这样做.也许它与Rails 2.3.2有所不同?

谢谢!布赖恩

Mic*_*cot 35

reset_column_information在使用新列之前,需要调用已更改的模型.在add_column和更新之间添加:

User.reset_column_information
Run Code Online (Sandbox Code Playgroud)

请参阅ActiveRecord :: Migration页面上的"在更改其表后使用模型" .