0

例如我有以下迁移

class AddStatusField < ActiveRecord::Migration
  def self.up
    add_column :tasks, :status, :string
    Task.update_all "status='complete'", "completed = 't'"
    remove_column :tasks, :completed
  end
end

当我运行这个(使用rake db:migrate)时,我收到以下消息

==  AddStatusField: migrating =================================================
-- add_column(:tasks, :status, :string)
   -> 0.0010s
-- update_all("status='complete'", "completed = 't'")
rake aborted!
An error has occurred, this and all later migrations canceled:

undefined method `update_all' for #<ActiveRecord::ConnectionAdapters::SQLite3Adapter:0xd3d34a8>

如果我立即再次运行迁移,update_all调用似乎可以工作。

我正在使用 Rails 2.3.5 和 sqlite3。

是什么赋予了?

4

2 回答 2

4

看起来它可能与Task. 它是否与您的应用程序中的任何其他类失败或只是失败Task

您可能可以使用它来调用它,::Task以指示您希望Task该类位于根命名空间中。例如,Rake 定义了自己的Task类,迁移过程中的某些东西可能也在做同样的事情。

于 2010-10-06T12:28:18.307 回答
1

尝试添加

Task.reset_column_information

就在您的 update_all 之前

于 2010-10-06T12:08:44.703 回答