【问题标题】:ROR model associations problemROR 模型关联问题
【发布时间】:2011-08-02 21:46:03
【问题描述】:

我有模型用户和消息。每个用户都可以向其他用户发送消息。在用户中没有与消息相关的字段。 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

此外,我希望在发送者或接收者被销毁时销毁消息。所以 :dependent=>:destroy 在某处需要

这是我的尝试,当然行不通:

用户:

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

提前致谢,

再见

【问题讨论】:

    标签: ruby-on-rails ruby associations


    【解决方案1】:

    你可以这样做:

    ## 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,拥有的对象是 strong 实体,因此它不包含外键。

    用存在思想来思考,如果一个对象没有它的关联就可以存在,那么它就是一个strong实体,如果没有它就不能存在,那么它就是一个 > 一个。

    【讨论】:

    • 每个实体都包含外键弱实体吗?
    • 这取决于实体是否可以在没有外键的情况下存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多