在 rails 4 迁移中加入 table 评论

Join table comment in rails 4 migration

我是 rails 4 的新手,我不太确定我的 join_table。

我已经完成迁移

rails g migration CreateJoinTableQuestionSubTopic question sub_topic

然后我得到了这个文件

class CreateJoinTableQuestionSubTopic < ActiveRecord::Migration
  def change
    create_join_table :questions, :sub_topics do |t|
      # t.index [:question_id, :sub_topic_id]
      # t.index [:sub_topic_id, :question_id]
    end
  end
end

为什么这两个索引在评论中?我认为其中只有一个取消注释,这是正确的方法吗?

不用写吗

t.column :question_id, :integer
t.column :sub_topic_id, :integer

Or/And

t.index :question_id
t.index :sub_topic_id

我想要一个高性能的连接 table,但如果 rails 4

上有一个新的连接,我不想以旧的方式进行连接

感谢您的帮助

迁移中的 create_join_table 命令是 Rails 4 中的新命令。这:

create_join_table :questions, :sub_topics do |t|
  # other commands
end

本质上是 shorthand 为此:

create_table :questions_sub_topics do |t|
  t.integer :question_id,  null: false
  t.integer :sub_topic_id, null: false
  # other commands
end

您可以在块中添加额外的列;您还可以按照迁移中的评论所建议的那样添加索引。您对索引的选择取决于您打算如何使用这些模型——Rails 不会为您选择,因为它不知道您的意图。如果您经常为给定的问题 (question.sub_topics) 调高 sub_topics,那么您希望您的索引首先出现在 question_id 上,然后是 sub_topic_id:

create_join_table :questions, :sub_topics do |t|
  t.index [:question_id, :sub_topic_id]
end

在这种情况下,您不需要仅在 :question_id 上添加索引,因为两列上的索引也用作第一列上的索引。