我正在將Devise添加到現有的Rails應用程序中,並且已經定義了Users表。該設計發生器推出了以下遷移:Rails 3.1.0遷移中remove_index的正確語法是什麼?
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
......但沒有骰子。我正在使用Postgres運行Rails 3.1.0,Ruby 1.9.2,rake 0.9.2.2。
多數民衆贊成讓我失望的命令是:
bundle exec rake db:rollback STEP=1
後成功應用遷移起來。有什麼建議?
還記得首先刪除索引,然後刪除列,您的代碼會做另一種方式,即使您使用正確的語法將失敗。 – 2015-05-11 12:05:26