0

我的应用程序中有许多多对多关系。

我不需要存储有关关系本身的信息,因此has_and_belongs_to_many在我的模型中使用关系。

我已经阅读了 Active Record 文档,它似乎证实了我的策略,我不清楚我是否仍需要在数据库中创建连接表,或者 Rails 3.2 中的 ActiveRecord 是否足够聪明,可以单独使用模型关系来处理它.

任何参考或解释将不胜感激。

- - - 休息 - - -

如果我确实需要存储关于关系本身的数据并且我has_many => through在我的模型中使用,我是否需要从“通过”表中删除主键(例如,它只有两个外键?)

谢谢!

4

1 回答 1

0

是的,您需要为 has_and_belongs_to_many 关联创建连接表。请记住,在 Rails 中您需要“迁移到创建”。以本文为例,假设我们有一个Account模型和一个Role模型,我们可以通过这个迁移创建一个连接表:

rails generate migration create_accounts_roles_join_table

现在我们将编辑刚刚创建的迁移文件

create_table :accounts_roles, :id => false do |t|
  t.integer :account_id
  t.integer :role_id
end

包括在内很重要,:id => false因为这将忽略创建表时通常生成的主键。此外,我们指定了两个外键account_idrole_id.

在两个模型中运行rake db:migrate并添加 HABTM 关联,​​一切都设置好了。

此外,作为旁注,添加join_table到迁移生成器的末尾不是必需的,但更具描述性,并且integer可以references在添加外键时替换为。它们是等价的,但可能更具描述性。

在问题的第二部分,您不需要从表中删除主键。

于 2013-05-23T04:28:05.690 回答