我正在创建一个表并指定:
t.integer :random_id, :unique => true
它不会为random_id添加唯一索引。但如果我这样做:
ActiveRecord::Migration.add_index :test, :random_id, :unique => true
然后它有效。第一种方式出了什么问题? 感谢
答案 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