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呼び出しは機能しているように見えます。

Rails2.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 に答える