我试图使它确保某些列不能为空。我使用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
文件中。
答案 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
然后再次迁移,一切正常。非常困惑,并且花费了大量不必要的时间来解决这个问题。