例如,我有以下迁移
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。
是什么给出了?
答案 0 :(得分:4)
看起来它可能与Task
存在命名冲突。它是否会在您的应用程序中的任何其他类或Task
?
您可以使用::Task
调用它来表明您希望根命名空间中的Task
类。例如,Rake定义了自己的Task
类,迁移过程中的某些内容可能也是如此。
答案 1 :(得分:1)
尝试添加
Task.reset_column_information
在您的update_all
之前