2015-11-02 68 views
0

我想使它如此確定的列不能爲空。我使用change_column沒有問題,但其中一些列有附加索引,表示它是唯一的。Rails 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

如何處理遷移的行爲取決於您的數據庫實施。更多信息here,但在您的遷移中,您應該明確要求您的change中的索引。

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

有關詳情,請參閱文檔information

0

因此,仍然不清楚發生了什麼,但事實證明索引在某些數據庫操作期間已從數據庫中刪除。

我只是把模式放回我需要的方式,然後運行rake db:setup然後我再次遷移,一切正常。花費很多時間花費在嘗試弄清楚它們之外。