2011-02-07 61 views
5

手机有很多消息。ActiveRecord关联:任何gotchas如果has_many WITHOUT相应belongs_to?

电子邮件地址有很多消息。

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

以下关联似乎对这些关系做工精细:

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

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

回答

4

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

从对方只使用has_many :messages可能是不够的,当你想从一条消息中检索电话信息。一般来说这很方便。

+0

是的我们发现没有“belongs_to”我们不能在视图中说@ message.phone.username感谢您的快速确认! – jpwynn 2011-02-07 20:23:42

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,因为消息可以有很多收件人。