1

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

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

你知道任何可以帮助我做到这一点的宝石吗?

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

4

1 回答 1

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

​您可以按如下方式创建消息​s

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) 您可以使用布尔字段已读、未读和已丢弃

于 2015-05-06T06:50:37.800 回答