1

这是我第一次使用邮箱。我想知道如何配置(如果可能的话)gem 以从我的现实中获得一个行程模型,并与来自用户的消息进行对话。(ie):对话是在行程中进行的,而不是直接在用户之间进行的。

我想被允许执行这样的事情:

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,与行程相关的对话模型也有。

非常感谢您的帮助。

4

1 回答 1

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

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

于 2014-12-15T20:45:59.857 回答