Rails ActiveRecord :: Migration index:true和add_index有什么区别?

sam*_*mol 20 migration activerecord rails-migrations

有什么区别

t.boolean :is_live, index: true
Run Code Online (Sandbox Code Playgroud)

add_index :table_name, :is_live
Run Code Online (Sandbox Code Playgroud)

如果没有区别,那么为什么只能add_index在schema.rb中反映出来.当我使用时index: true,我实际上无法看到索引schema.rb.我应该只使用这种add_index方法.

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

add_index "table_name", ["is_live"], name: "index_table_name_on_is_live", using: :blahblah
Run Code Online (Sandbox Code Playgroud)

Ale*_*xey 29

刚发现该:index选项仅供参考(t.referencest.belongs_to).对于"普通"列类型,将忽略此选项(这就是使用该:index选项时未在schema.db中反映索引的原因).

对于较不详细的语法,有一种index类型:

t.index :column_name # extra options may be provided also
Run Code Online (Sandbox Code Playgroud)


can*_*nic 7

简而言之:两者都做同样的工作.ìndex:true`只是为您节省了额外的一条线.请看这里https://github.com/rails/rails/pull/5262#issuecomment-4329571

  • 这种说法具有误导性.当然,他们做同样的事情,但不是在所有情况下.:index选项仅用于引用(t.references或t.belongs_to).请参阅@Alexey的回答 (6认同)