使用Mailboxer仅维护一个模型上的一个对话

时间:2014-11-28 20:22:56

标签: ruby-on-rails ruby-on-rails-3 mailboxer

这是我第一次使用Mailboxer。我想知道如何配置(如果可能的话)宝石从我的现实中获得一个行程模型,其中包含来自用户的消息。 (即):对话是在行程之上,而不是直接在用户之间进行。

我希望被允许执行类似的事情:

itinerary.conversation.mailbox.conversations.first(它总会有一个对话)

conv = user1.itineraries.first.conversation
user1.reply_to_conversation(conv, "It's okey I want to buy the trip")
user2.reply_to_conversation(conv, "Ok. In a while the invoice will be send")

此外,我希望当来自其他用户的新消息进入行程对话时通知用户。

用户可以是客户端或代理(使用单表继承)。两个模型都有指令acts_as_messageable,与行程相关的Conversation模型也有。

非常感谢帮助。

1 个答案:

答案 0 :(得分:1)

最后,我得到了这个工作。我已经使用acts_as_messageable标记了所涉及的模型,客户端,代理和行程。我只想在用户之间发送邮件(即客户端和代理商),我必须将nil返回到行程模型中以避免邮件发送。包含邮箱会话的模型行程中定义了此方法:

  def name
    return "You should add method :name in your Messageable model"
  end

  def mailboxer_email(object)
    #Check if an email should be sent for that object
    #if true
    return nil
    #if false
    #return nil
  end

始终通过对话维护和响应的解决方案是让逻辑知道消息是否由对话成员之一编写:

if (itinerary.mailbox.conversations.first.nil?)
  current_user.send_message(itinerary, params[:body], "Itinerary messages")
else
  current_user.reply_to_conversation(itinerary.mailbox.conversations.first, params[:body], "Itinerary messages")
          end 

最终会以这种方式显示对话的消息:

 messages = itinerary.mailbox.conversations.first.messages.order(:created_at)
 present messages, :with => Conversations::MessageResponseEntity, success: true

这就是全部。希望它可以帮助任何人。