用于rails的消息传递gems,能够按线程对消息进行分组

时间:2013-09-05 10:00:05

标签: ruby-on-rails-3.2 rubygems messaging

我有一个rails 3应用程序。我想添加一个具有以下功能的内部消息系统:

  • 用户有许多消息(已发送和已接收)
  • 要发送消息,用户可以在“收件人”字段中键入一封或多封电子邮件。每封电子邮件都是自动填充的(这不需要在宝石中)
  • 邮件可以标记为已读,未读和已删除
  • 消息按线程分组:如果Bob向Alice发送消息,Alice回复,然后Bob再次回复,则Bob只在其收件箱中看到此对话的一个条目。 (很像Gmail)

你知道有什么宝石可以帮我这么做吗?

最受欢迎的一种是Mailboxer(https://github.com/ging/mailboxer)。但我不太喜欢这个模型(通知而不是消息,对话而不是线程,收据表...)。所以我对替代品感兴趣。

1 个答案:

答案 0 :(得分:3)

我想建议如下关联

​​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

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'
end​​

您可以按照以下步骤创建消息

first_msg = Message.new(:to_user => ​userA, :from_user => ​userB, :body => 'Hello!')

​userA​_reply = first_msg.replies.build(:to_user => ​userA, :from_user => ​user​B​, :body => 'hi back')

​userB​_reply = first_msg.replies.build(:to_user => ​user​B​, :from_user => ​userA, :body => 'later')

并且更容易检查用户发送的消息为@ user.messages_sent

并收到@ user.messages_received

a)您可以使用https://jqueryui.com/autocomplete/自动填写电子邮件

b)您可以使用读取,未读和已删除的布尔字段