Я в процессе добавления Devise к существующему Rails-приложению с уже определенной таблицей Users. Генератор Разрабатывают выталкивается следующий переход:Какой правильный синтаксис для remove_index в миграции 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
вниз миграция не генерируется, и у меня чертовски времени удаления этих индексов. Я вижу разные предложения в документации и различные предложения в Интернете, но ни один из них, похоже, не работает для меня. Например ...
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
приводит ...
An error has occurred, this and all later migrations canceled:
Index name 'index_users_on_email' on table 'users' does not exist
что странно, потому что если я проверить базу данных, конечно же, 'index_users_on_email' право есть ...
я пробовал другие варианты, в том числе
remove_index :users, :column => :email
remove_index :users, 'email'
или:
change_table(:users) do |t|
t.remove_index :email
end
... но не кости. Я запускаю Rails 3.1.0, Ruby 1.9.2, rake 0.9.2.2, с Postgres.
Команда, которая позволить мне вниз:
bundle exec rake db:rollback STEP=1
после успешного применения миграции вверх. Любой совет?
Также помните, что сначала удалите индекс, а затем удалите столбец, ваши коды будут действовать наоборот и не удастся, даже если вы используете правильный синтаксис. –