【发布时间】:2012-02-20 03:39:42
【问题描述】:
我正在将 Devise 添加到现有的 Rails 应用程序中,并且已经定义了一个用户表。设计生成器推出了以下迁移:
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
成功应用迁移后。有什么建议吗?
【问题讨论】:
-
还记得先删除索引,然后删除列,您的代码会反其道而行之,即使您使用正确的语法也会失败。
标签: ruby-on-rails ruby-on-rails-3.1 rails-migrations