Mailboxer + Rails 4.1:给自己的消息在对话中显示重复的发件箱和收件箱消息

时间:2014-08-19 18:49:34

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

将邮箱gem版本0.12.2与Rails版本4.1.4一起使用。

当我向自己发送消息时,“对话”视图会显示相同的消息两次(一次为mailbox_type = sentbox,一次为mailbox_type = inbox) 。我发送给其他用户的邮件没有这个问题。

我只是想在我的对话视图中显示一次消息(理想情况下,在查看我的收件箱时显示inbox版本,在查看我发送的消息时显示sentbox版本。)我有办法吗?那样做?

此处我的自定义show中的ConversationsController操作(current_user是指示当前已登录用户的设计方法)

def show
  @mailbox = current_user.mailbox
  @conversation = @mailbox.conversations.find(params[:id])
  @receipts = @conversation.receipts_for(current_user)
end

我还在show行动中尝试了以下组合,但结果相同。

  • 使用inbox方法代替conversations方法:
    @conversation = @mailbox.inbox.find(params[:id])
  • receipts_for实例变量上使用@mailbox方法:
    @receipts = @mailbox.receipts_for(@conversation)

这是我对应的show.html.erb视图

<ul>
  <%= content_tag_for(:li, @receipts) do |receipt| %>
    <% message = receipt.message %>
    <strong>From:</strong> <%= message.sender.email %>
    <br/>
    <strong>Message:</strong><%= simple_format h message.body %>
    <strong>Sent:</strong> <%= @conversation.updated_at.strftime("%a, %m/%e/%Y %I:%M %p") %>

    <div>
      <br/>DEBUG INFO:<br/>
      Message Id <%= message.id %><br/>
      Receipt Id <%= receipt.id %><br/>
      Receipt Mailbox type <%= receipt.mailbox_type %><br/>
    </div>
    <hr/>

  <% end %>
</ul>

无论如何只是得到我的&#34;收件箱&#34;查看与我自己的对话,不要显示重复的消息?

1 个答案:

答案 0 :(得分:0)

感谢在gem's github page上回答这个问题的歌曲:

def show
  @mailbox = current_user.mailbox
  @conversation = Mailboxer::Conversation.find(params[:id])
  @receipts = @conversation.receipts_for(current_user).inbox
end

执行此操作的行是@conversation.receipts_for(current_user).inbox。在inbox&#34; gets the receipts for a logged in user from that conversation that are labeled with the mailbox_type of inbox.&#34;

上拨打receipts

限制

不幸的是,如果您在{{@receipts上使用show方法,则对话与其他用户的对话可能不适合对话inbox视图的receipts变量的内容1}} - 对话的current_user视图中与其他用户无法看到show发送的消息。这是邮箱gem的限制(Mailboxer的设计不能仅向自己发送邮件)。

最后,如果您需要支持仅向自己发送消息,则需要在控制器/视图中使用额外的逻辑。