ROR模型关联问题

时间:2011-08-02 21:46:04

标签: ruby-on-rails ruby associations

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

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

我应该在每个模型中使用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

提前致谢,

再见

1 个答案:

答案 0 :(得分: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_one时,它必须包含外键 has_many ,具有实体的对象,因此它不包含外键。

通过存在的想法来思考,如果一个对象可以存在而没有它的关联,那么它就是一个强大的实体,如果它没有它就不存在,它就是一个一。