【发布时间】:2019-06-03 21:52:30
【问题描述】:
我之前使用迁移创建了一个连接表:
class CreateJoinTableCategoryListing < ActiveRecord::Migration[5.2]
def change
create_join_table :categories, :listings do |t|
# t.index [:category_id, :listing_id]
# t.index [:listing_id, :category_id]
end
end
end
我正在回顾这一点,因为我将要创建一个新的连接表。但是在查看它时,我注意到我迁移时 t.index 仍然被注释掉,并且连接的表仍然正常运行。
我阅读了这篇文章,但我没有找到任何关于有人这样做或不需要他们的帖子。
对于那些从未迁移过的索引,它是如何操作的?它们的需求如何?
我正在创建一个新的迁移:
class CreateJoinTable < ActiveRecord::Migration[5.2]
def change
create_join_table :users, :affiliates do |t|
# t.index [:user_id, :affiliate_id]
# t.index [:affiliate_id, :user_id]
end
end
end
我应该在这里选择哪个索引?
它的工作原理是会员能够手动向表格提交“佣金”(确实需要将其添加到迁移中),但如果佣金被更新,它应该取代列而不是创建新行。
用户实际上与此无关,并且主要由会员更新,以更新他们对用户的佣金率。
更新:
是否可以在连接表中添加另一个字段?
我想在表格中添加一个 :commission,但我找不到任何文档可以为此做任何事情。我应该只在用户表中定义佣金率并取消连接表吗?
更新 2:
最终放弃了这个想法,并仅与用户和附属协会保持我目前的做法。我取消了 UsersAffiliates 的想法,因为这种情况不需要它。
【问题讨论】:
-
索引加快了搜索速度。因此,您仍然可以在没有它们的情况下搜索特定记录,但速度较慢。
-
查看我在数据库中的连接表时。它有listing_id 和category_id。它们只是自动添加吗?还有 - 我应该创建任何新的迁移来帮助这个吗?
-
是的,列本身是通过
create_join_table方法自动添加的,请看这里:rubydoc.info/github/rails/rails/… 是的,要添加您需要的索引,您可能应该创建另一个迁移。 -
嗯...好的,我会更新的。我添加了我需要做的迁移并且对我应该如何选择哪一个感到困惑。我很困惑,因为它们看起来基本相同,只是顺序不同。而你发给我的链接并没有显示出同样的数组使用风格
-
这取决于您打算按哪一列搜索此表(或者可能同时搜索两者)。
标签: ruby-on-rails ruby