【问题标题】:Creating Join-Table with indexes in Rails在 Rails 中创建带有索引的连接表
【发布时间】:2015-11-07 21:33:43
【问题描述】:

当我想创建一个连接表时,我从rubyguides 读到的是我可以直接设置索引如下:

create_join_table :products, :suppliers do |t|
  t.index [:product_id, :supplier_id]
  t.index [:supplier_id, :product_id]
end

但是当搜索更多关于我阅读的主题时,我应该在创建表后添加索引:

add_index(:products_suppliers, [:product_id, :supplier_id], :unique => true)

Rails(4)是否理解第一种方法,还是在我的表创建后添加索引更好?

我的两个示例会提供相同的索引还是两个不同的索引?

【问题讨论】:

  • 尝试一种方式,rake db:migrate,检查schema.rb,然后检查rake db:rollback,然后尝试另一种方式。此外,您发布的第一部分代码与您提供的链接中的代码不匹配。
  • 在第二个示例中,您要添加唯一性约束。我认为您不能在第一个示例中的块中添加唯一性约束(奇怪的 Rails 怪癖)。所以:如果你想要一个索引和唯一性,你必须用第二种方法。
  • 好的,非常感谢!这就是我想知道的:)

标签: ruby-on-rails database model rails-migrations


【解决方案1】:

好的,正如@Jason 指出的那样,我尝试了两种方法,结果结果是一样的 :)

create_join_table :products, :suppliers do |t|
    # either directly here
    t.index [:product_id, :supplier_id], :unique => true
end

# or afterwards, both work
add_index(:products_suppliers, [:product_id, :supplier_id], :unique => true)

即使在第一个示例中定义 uniqueness 也有效。

【讨论】:

    猜你喜欢
    • 2017-11-05
    • 2015-08-11
    • 2017-11-03
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 2015-07-19
    相关资源
    最近更新 更多