【问题标题】:Rails ActiveRecord::Migration what is the difference between index: true and add_index?Rails ActiveRecord::Migration index: true 和 add_index 有什么区别?
【发布时间】:2013-11-11 19:21:43
【问题描述】:

有什么区别

t.boolean :is_live, index: true

add_index :table_name, :is_live

如果没有区别,为什么只有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

【问题讨论】:

    标签: activerecord migration rails-migrations


    【解决方案1】:

    刚刚发现:index 选项仅供参考(t.referencest.belongs_to)。对于“普通”列类型,此选项将被忽略(这就是为什么当您使用 :index 选项时索引不会反映在您的 schema.db 中的原因)。

    对于不太冗长的语法,有一个 index 类型:

    t.index :column_name # extra options may be provided also
    

    【讨论】:

    • t.reference :users, index: truet.index :users 相同吗?
    • 我也想知道。有答案吗?
    • 绝对不一样。前者创建一个名为user_id 的列并为其创建一个索引。后者为名为 users 的现有列创建索引。
    【解决方案2】:

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

    【讨论】:

    • 这种说法具有误导性。当然,他们做同样的事情,但不是在所有情况下。 :index 选项仅用于参考(t.references 或 t.belongs_to)。查看@Alexey 的回答
    猜你喜欢
    • 2021-05-13
    • 1970-01-01
    • 2013-06-11
    • 2015-05-11
    • 2015-04-08
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多