ActiveRecord迁移:unique =>真的被忽略了?

时间:2012-12-17 23:42:18

标签: ruby activerecord

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

t.integer   :random_id, :unique => true

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

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

然后它有效。第一种方式出了什么问题? 感谢

1 个答案:

答案 0 :(得分:3)

我认为你已经在2个例子中自己解释过了 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