2

我正在创建一个表并指定:

t.integer   :random_id, :unique => true

它不会向 random_id 添加唯一索引。但如果我这样做:

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

然后它工作。第一种方法有什么问题?谢谢

4

1 回答 1

4

我想你已经在你的两个例子中自己解释过了。
t.integer 是列定义,而 add_index 添加索引。
:unique 是一个索引选项,索引与列分开定义: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

于 2012-12-18T00:05:23.753 回答