在“has_many :through”和“has_and_belongs_to_many”之间进行选择

Posted

技术标签:

【中文标题】在“has_many :through”和“has_and_belongs_to_many”之间进行选择【英文标题】:rails choosing between "has_many :through" and "has_and_belongs_to_many" 【发布时间】:2015-05-17 11:38:01 【问题描述】:

我正在尝试选择正确的关联方法。

我有一个帖子模型和一个类别模型。我希望帖子属于多个类别和类别以拥有许多模型。

api 文档说

如果您需要将关系模型作为自己的实体使用,请使用 has_many :through。在处理遗留模式或从不直接处理关系本身时使用 has_and_belongs_to_many。"

我不太明白他们所说的关系模型是什么意思

我将要做的事情包括。

    显示与帖子相关的类别 显示与某个类别相关的所有帖子。

我的问题,哪个协会允许我做以上? 我的偏好是 has_and_belongs_to,因为它似乎是直接关联

谢谢

【问题讨论】:

【参考方案1】:

两者都可以,但 has_and_belongs_to_many 更容易设置并且使用的代码更少。

请参阅我对this question 的回答以获得帮助。

关于关系模型,根据您的描述,您不需要它。但是为了让您知道它是什么,您需要数据库中的三个表来使多对多关系起作用。中间表称为连接表,您可以在我上面提到的答案中看到一个。如果为连接表创建模型,那就是关系模型。好处是您可以使用它来保存您认为对关系很重要的信息。缺点是额外的复杂性(有时值得),然后您应该使用更详细的 has_many :through 方法。

【讨论】:

以上是关于在“has_many :through”和“has_and_belongs_to_many”之间进行选择的主要内容,如果未能解决你的问题,请参考以下文章

在“has_many :through”和“has_and_belongs_to_many”之间进行选择

在 Rails 4 中使用 has_many :through :uniq 时的弃用警告

Rails RSpec 测试 has_many :through 关系

何时在 Rails 中使用“has_many :through”关系?

使用 `:has_many :through` 记录关联处理复选框表单

has_and_belongs_to_many 或多态 has_many :through?