2012-12-17 77 views
1

我創建一個表,並指定:ActiveRecord migration:unique => true被忽略?

t.integer :random_id, :unique => true 

它不添加一個唯一索引random_id。但如果我這樣做:

ActiveRecord::Migration.add_index :test, :random_id, :unique => true 

然後它的工作。第一種方式有什麼問題? THanks

回答

3

我想你已經在你的2個例子中自己解釋了它。
t.integer是列定義,而add_index添加索引。
:獨特的是,指數期權和指數從列分別定義:
http://api.rubyonrails.org/classes/ActiveRecord/Migration.html

這允許您定義不僅是單個列作爲唯一的,但列的組合。如果你只想要在某個範圍內的唯一值,這是特別有用的,例如,訂購部分中的內容:

add_index(:post_position_within_section, [:position, :sections_id], :unique => true) 

稍微此處修改: http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/add_index