Rails ActiveRecord::迁移index:true和add_index之间有什么区别?

Rails ActiveRecord::迁移index:true和add_index之间有什么区别?,activerecord,migration,rails-migrations,Activerecord,Migration,Rails Migrations,两者的区别是什么 t.boolean :is_live, index: true 及 如果没有区别,为什么schema.rb中只反映了add\u索引。当我使用index:true时,实际上无法在schema.rb中看到索引。我应该只使用add\u index方法吗 当使用add_index方法时,我可以在我的schema.rb中看到这一点 add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", usin

两者的区别是什么

t.boolean :is_live, index: true

如果没有区别,为什么schema.rb中只反映了
add\u索引
。当我使用
index:true
时,实际上无法在
schema.rb
中看到索引。我应该只使用
add\u index
方法吗

当使用
add_index
方法时,我可以在我的schema.rb中看到这一点

add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah

简而言之:两者都做同样的工作。ìndex:true`只为您节省了一行额外的代码。看看这里,

刚刚发现
:index
选项仅用于参考(
t.references
t.attributes\u to
)。对于“普通”列类型,忽略此选项(这就是为什么在使用
:index
选项时,schema.db中不会反映索引)

对于不太详细的语法,有一个
索引
类型:

t.index:column_name#还可以提供额外的选项

这种说法具有误导性。当然,他们做同样的事情,但不是在所有情况下索引选项仅用于引用(t.references或t.attown_to)。参见@Alexeyso is
t的答案。参考:用户,索引:true
t相同。索引:用户
?我也想知道这一点。有吗?绝对不一样。前者创建名为
user\u id
的列和索引。后者为名为
users
的现有列创建索引。
add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah