【发布时间】:2014-11-05 22:58:02
【问题描述】:
所以我试图在用户模型的电子邮件列上创建一个数据库索引,但我一定做错了,因为在我进行迁移后,我去检查 schema.rb 文件以查看 add_index方法包括在内,没有任何显示。顺便说一句,我正在使用 postgresql。所以这就是我所做的...... 我创建了迁移
rails generate migration add_index_to_users_email
之后,我编辑并保存了 db/migrate/20140911192804_add_index_to_users_email.rb 文件,并使用以下代码进行索引:
class AddIndexToUsersEmail < ActiveRecord::Migration
def change
add_index :users, :email, unique: true
end
end
之后我在控制台上运行
bundle exec rake db:migrate
当我去检查 schema.rb 文件以查看是否包含 add_index 方法时,我发现它不存在。这是我的 schema.rb 的样子
ActiveRecord::Schema.define(version: 20140911192804) do
# These are extensions that must be enabled in order to support this database
enable_extension "plpgsql"
create_table "users", force: true do |t|
t.string "name"
t.string "email"
t.datetime "created_at"
t.datetime "updated_at"
end
end
我尝试运行 rake db:rollback 以再次运行 db:migrate 并查看是否发生了一些“魔术”,但我什至无法回滚,收到以下错误消息:
== AddIndexToUsersEmail: reverting ===========================================
-- remove_index(:users, {:unique=>true, :column=>:email})
←[1m←[35m (0.0ms)←[0m ROLLBACK
rake aborted!
An error has occurred, this and all later migrations canceled:
Index name 'index_users_on_email' on table 'users' does not existC:in `migrate'
Tasks: TOP => db:rollback
我很迷茫......我发现有趣的是在 schema.rb 文件中的这一行
ActiveRecord::Schema.define(version: 20140911192804) do
与 add_index db/migrate/20140911192804_add_index_to_users_email.rb 的迁移文件具有相同的时间戳
因此,在迁移过程中,schema.rb 文件发生了某种更新,但不是我所期望的。
我什至不知道从哪里开始 :D 所以我希望有经验的人能给我一个提示。
非常感谢!
【问题讨论】:
-
在您的迁移中,您能否删除
unique: true并告诉我这是否可行? -
@Anthony 我刚刚删除了 unique: true 并且 schema.rb 文件仍然没有显示 add_index 方法。
-
当我运行 rake db:migrate 控制台运行正常,没有显示错误。
-
我认为您只有另一个迁移,对吗?你的应用在 github 上是偶然的吗?
标签: ruby-on-rails ruby postgresql railstutorial.org rails-migrations