Rails change_column从架构中删除索引

时间:2015-11-02 10:41:30

标签: mysql ruby-on-rails ruby-on-rails-3.2 rails-migrations

我试图使它确保某些列不能为空。我使用change_column没有问题,但是其中一些列附加了一个索引,表示它是唯一的。

但是,当我运行此迁移时:

change_column :users, :username, :string, null: false
change_column :users, :email, :string, null: false
change_column :users, :password, :string, null: false
change_column :users, :terms_agreed, :boolean, null: false

删除架构中的add_index

schema.rb

- add_index "users", ["username"], :name => "index_users_on_username_code", :unique => true
- add_index "users", ["email"], :name => "index_users_on_email_code", :unique => true
add_index "users", ["confirmation_code"], :name => "index_users_on_confirmation_code", :unique => true

如何在不删除索引的情况下执行此操作?

P.S。它实际上并没有删除数据库中的索引。就在schema.rb文件中。

2 个答案:

答案 0 :(得分:2)

如何处理迁移的行为取决于您的数据库实现。更多信息here,但在您的迁移中,您应该在change明确请求索引。

class DoSomethingToTable < ActiveRecord::Migration
  def change
    change_column :users, :username, :string, null: false, index: true
  end
end

请参阅文档了解更多information

答案 1 :(得分:0)

所以仍然不清楚发生了什么,但事实证明在某些数据库操作期间索引已从数据库中删除。

我只是按照我需要的方式将架构放回原点并运行rake db:setup然后再次迁移,一切正常。非常困惑,并且花费了大量不必要的时间来解决这个问题。