Ruby on rails Rails4创建联接选项卡无需在迁移中添加主键?;

Ruby on rails Rails4创建联接选项卡无需在迁移中添加主键?;,ruby-on-rails,rails-migrations,Ruby On Rails,Rails Migrations,我使用以下命令: rails g migration CreateJoinTableUserPloy user ploy 我检查迁移文件: create_join_table :Users, :Posts do |t| #t.index [:user_id, :ploy_id] #t.index [:ploy_id, :user_id] end 有2个索引将由defualt进行注释 然后我运行以下命令: rake db:migrate 然后我检查我

我使用以下命令:

 rails g migration CreateJoinTableUserPloy user ploy
我检查迁移文件:

    create_join_table :Users, :Posts do |t|
      #t.index [:user_id, :ploy_id]
      #t.index [:ploy_id, :user_id]
    end
有2个索引将由defualt进行注释

然后我运行以下命令:

rake db:migrate
然后我检查我的数据库结构

我没有看到主键,这是否意味着join tabel不需要在数据库结构中添加索引和主键?

与一致,我将对此作为回答,即使一些信息在注释线程中

Rails生成的联接表中没有主键(即由
create_join_table
创建的,以
JoinTable
为名的迁移使用主键),Rails对主键没有内在要求。这是因为大多数纯联接表仅由联接表的id访问,在这种情况下,不需要主键。当然,如果愿意,您可以添加并指定主键列

Rails不支持多列主_键,尽管有多个gem提供这种支持,例如


此外,根本不需要创建索引。如果您愿意,您可以创建一个,它将加快对记录的访问,但需要花费一些额外的时间来创建和更新记录。有关这方面的更多讨论,请参阅。

他们不需要和ID(或ID上的索引),因为您永远不会按ID搜索该表,您将始终搜索user_ID和post_ID。我认为索引会影响数据库的性能,但为什么rails不需要索引?哦,您的意思是迁移时会对这些索引进行注释?我想这些都是帮助您创建迁移的提示,只需取消注释并将“poly”替换为“post”。我认为您只需要注释掉的行中的一行,因此您必须通过取消注释来决定保留哪一行。