gpt4 book ai didi

ruby-on-rails - Rails 3 中私有(private)消息建模的首选方式

转载 作者:数据小太阳 更新时间:2023-10-29 06:56:09 26 4
gpt4 key购买 nike

我计划在成员之间实现一个私有(private)消息系统。我想知道对此的首选方法是什么。

要求是

  1. 我应该能够像这样轻松地检索它们

    @user.conversations               #Should return User objects that I sent or received messages from (but not me)
    @user.conversations.messages #Messages from all or specific user objects.
    @user.conversations.messages.unread #Unread messages
  2. 调用@user.conversations 时应该只检索向我发送消息的人或我向其发送消息的人。 current_user 应该被排除在外。

  3. 如果我是 sender_id=5 并发送给 to_id=10,那么其他人会回复为 sender=10 to_id=5。这应该被视为和理解为同一个 session 对象。


关于最后一点。我不确定首选的建模方法是什么。

最好使用一种对话模型来处理所有消息,例如

    attr_accessible :user_id, :friend_id, :message, :read
belongs_to :user

或者最好创建一个 Conversation 模型来处理关联和消息的 Message 模型。

我想看看如何实现这种关系的示例案例,以及是否有其他方法可以实现。

我有点迷路了。

最佳答案

一个更简单的模型是捕获每条消息:

class Message < ActiveRecord::Base
belongs_to :from_user, :class_name => 'User' # from_user_id field fk Users
belongs_to :to_user, :class_name => 'User' # to_user_id field fk Users
belongs_to :thread, :class_name => 'Message' # Reference to parent message
has_many :replies, :class_name => 'Message', :foreign_key => 'thread_id'

named_scope :in_reply_to, lambda { |message| :conditions => {:thread => message}, :order => 'created_at' }
end

class User < ActiveRecord::Base
has_many :messages_received, :class_name => 'Message', :foreign_key=> 'to_user_id'
has_many :messages_sent, :class_name => 'Message', :foreign_key=> 'from_user_id'
end

如果您需要捕获消息线程,任何作为回复的消息都可以存储对启动对话(也称为线程)的初始消息的引用。例如:

first_msg   = Message.new(:to_user => bob, :from_user => sally, :body => 'Hello!')
sally_reply = first_msg.replies.build(:to_user => bob, :from_user => sally, :body => 'hi back')
bob_reply = first_msg.replies.build(:to_user => sally, :from_user => bob, :body => 'later')

关于ruby-on-rails - Rails 3 中私有(private)消息建模的首选方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130663/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com