我使用这个命令:
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
有两个索引被defualt评论。
然后我运行这个命令:
rake db:migrate
然后我检查我的数据库结构
我没见过主键,这是否意味着连接表不需要在数据库结构中添加索引和主键?
答案 0 :(得分:4)
与http://meta.serverfault.com/a/1931一致,即使有些信息在评论主题中,我也会回答这个问题。
Rails生成的连接表中没有主键(即由create_join_table
创建,其名称中的JoinTable
迁移使用),Rails没有固有的要求。这是因为大多数纯连接表只能通过连接表的id访问,在这种情况下,primary_key是不必要的。当然,如果愿意,您可以添加和指定主键列。
Rails 不支持多列primary_keys,尽管有多个gem提供该支持,例如https://github.com/composite-primary-keys/composite_primary_keys。
此外,没有必要创建索引。如果您愿意,您可以创建一个,它将加快对记录的访问,但需要花费一些额外的时间来创建和更新记录。有关详细信息,请参阅https://stackoverflow.com/a/3658980/1008891。