Pergunta

Por exemplo, eu tenho a seguinte migração

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

Quando eu corro isso (usando rake db:migrate) Recebo a seguinte mensagem

==  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>

Se eu imediatamente executar a migração novamente, o update_all As chamadas parecem funcionar.

Estou usando o Rails 2.3.5 e o sqlite3.

O que da?

Foi útil?

Solução

Parece que pode ser um conflito de nomenclatura com Task. Falha com qualquer outra classe em seu aplicativo ou apenas Task?

Você pode chamá -lo usando ::Task para indicar que você deseja o Task Classe no espaço de nome da raiz. Rake, por exemplo, define seu próprio Task classe e é possível que algo no processo de migração esteja fazendo o mesmo.

Outras dicas

Tente adicionar

Task.reset_column_information

logo antes da sua atualização_all

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top