Estoy en el proceso de agregar Devise a una aplicación de Rails existente, con una tabla de Usuarios ya definida. El generador legado empujó el siguiente migración:¿Cuál es la sintaxis correcta para remove_index en una migración de Rails 3.1.0?
class AddDeviseToUsers < ActiveRecord::Migration
def self.up
change_table(:users) do |t|
## Database authenticatable
t.string :email, :null => false, :default => ""
t.string :encrypted_password, :null => false, :default => ""
## Recoverable
t.string :reset_password_token
t.datetime :reset_password_sent_at
## Rememberable
t.datetime :remember_created_at
## Trackable
t.integer :sign_in_count, :default => 0
blah blah blah....
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
end
no se genera la migración descendente, y yo estoy teniendo un infierno de tiempo para la eliminación de esos índices. Estoy viendo diferentes notación sugerida en la documentación, y diferentes sugerencias en línea, pero ninguna de ellas parece estar funcionando para mí. Por ejemplo ...
def self.down
change_table(:users) do |t|
t.remove :email
t.remove :encrypted_password
t.remove :reset_password_token
blah blah blah...
end
remove_index :users, :email
remove_index :users, :reset_password_token
end
resultados en ...
An error has occurred, this and all later migrations canceled:
Index name 'index_users_on_email' on table 'users' does not exist
lo cual es extraño, porque si puedo comprobar la base de datos, por supuesto, 'index_users_on_email' está ahí ...
que he probado otras variaciones, incluyendo
remove_index :users, :column => :email
remove_index :users, 'email'
o:
change_table(:users) do |t|
t.remove_index :email
end
... pero no hay dados. Estoy ejecutando Rails 3.1.0, Ruby 1.9.2, rastrillo 0.9.2.2, con Postgres.
El comando que me está defraudando es:
bundle exec rake db:rollback STEP=1
después de aplicar con éxito la migración hacia arriba. ¿Algún consejo?
También recuerde primero quitar el índice y luego quitar la columna, sus códigos hacen al revés y fallarán incluso si usa una sintaxis correcta. –