1

将mailboxer gem 0.12.2 版与Rails 4.1.4 版一起使用。

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

我只想在我的对话视图中显示一次消息(理想情况下是inbox查看我的收件箱时的sentbox版本和查看我发送的消息时的版本。)有没有办法可以做到这一点?

这是我show在自定义中的操作ConversationsControllercurrent_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>

有没有办法让我的“收件箱”视图与自己的对话不显示重复的消息?

4

1 回答 1

0

感谢 searsaw 在gem 的 github 页面上回答这个问题:

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“从对话receipts获取登录用户的收据,这些收据标有 的邮箱类型inbox

限制

不幸的是,如果您使用on 方法,@receipts对话视图的变量内容show可能不适用于与其他用户的对话-与其他用户的对话视图中将看不到 的已发送消息。这是mailboxer gem 的一个限制(Mailboxer 的设计目的不是只能向您自己发送消息)。inboxreceiptscurrent_usershow

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

于 2014-08-20T05:15:41.050 回答