2011-08-02 127 views
3

我有模型用户和消息。每个用户都可以发送消息给其他用户。在用户中没有与消息相关的字段。在消息中有以下内容:from_id,to_id,内容。ROR模型关联问题

我试图自己工作,但几分钟后感到困惑。

has_many has_one,belongs_to的组合应该用在每个模型中吗?应该有以下方法可用:

msg.from => author of the message 
msg.to => receiver 
usr.sent_messages => array of sent messages 
usr.received_messages => array of received messages 

此外我希望消息发送者或接收者销毁时销毁。所以:依赖=>:摧毁某处需要

这是我的尝试,这当然不工作:

用户:

has_many :sent_messages, :source => :message, :dependent => :destroy 
has_many :received_messages, :source => :message, :dependent => :destroy 

消息:

has_one :from, :source=>:user 
has_one :to, :source=>:user 

谢谢提前

再见

回答

3

你可以做这样的:

## User 
    has_many :received_messages, :foreign_key => :to_id, :class_name => 'Message', :dependent => :destroy 
    has_many :sent_messages, :foreign_key => :from_id, :class_name => 'Message', :dependent => :destroy 

## Message 
    belongs_to :from, :class_name => 'User', :foreign_key => :from_id 
    belongs_to :to, :class_name => 'User', :foreign_key => :to_id 

只要记住,在做联想的时候,当你做一个belongs_to的这意味着属于对象是一个弱实体,因此它必须包含外键,当你说has_onehas_many,具有的对象是实体,因此它不包含外键。

想想看在的存在的想法,如果能有一个对象而它的协会,它是一个强大的实体,如果没有它不存在的话,它是一个之一。

+0

非常感谢。这工作完美! – gisek

+0

是否每个实体都包含一个外键弱实体? – Anwar

+0

这取决于实体是否可以不存在外键存在或不存在。 –