ActiveRecord关联:如果has_many没有相应的belongs_to,有任何问题吗?

时间:2011-02-07 19:54:59

标签: ruby-on-rails-3 activerecord has-many belongs-to

手机有很多信息。

电子邮件地址包含许多消息。

消息属于手机,电子邮件或两者都不属于。 belongs_to关联是可选的。

以下关联似乎适用于这些关系:

  • 手机型号has_many :messages
  • 电子邮件模型has_many :messages
  • 消息模型没有belongs_to :phones, :email

这可以,还是有一些正确的方法来指定“can_belong_to”关系?

2 个答案:

答案 0 :(得分:4)

完全正确的单向关系。使用两者有时被一些纯粹主义者称为“曲解依赖”,并且在使用validates_associated时可能会导致问题。

当您想要从一条消息中检索电话信息时,仅使用has_many :messages的另一方可能还不够。一般来说,这是方便的问题。

答案 1 :(得分:1)

具有belongs_to关联的模型包含外键(例如messages表将包含phone_idemail_id列。

belongs_to关联与has_many相结合,可让您轻松访问相关记录:

phone.messages
message.phone

因此,如果没有belongs_to和FK列,则has_many关联非常有用。

在这种情况下,您可能需要多对多关系,例如has_and_belongs_to_many,因为邮件可以包含多个收件人。