Não é possível atualizar os registros nas migrações de banco de dados do meu Rails
-
28-09-2019 - |
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?
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