Mailboxer + Rails 4.1: сообщение самому себе показывает дубликат отправленного и входящего сообщений в разговоре

Использование 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>

Есть ли способ просто получить представление «Входящие» для разговоров с самим собой, чтобы не отображались дубликаты сообщений?


person richsinn    schedule 19.08.2014    source источник


Ответы (1)


Благодарим 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 "получает квитанции для вошедшего в систему пользователя из этого разговора, которые помечены mailbox_type из inbox."

Ограничения

К сожалению, содержимое переменной @receipts для представления show беседы может оказаться нежелательным для бесед с другими пользователями, если вы используете метод inbox для receipts — отправленные сообщения current_user не будут отображаться в представлении show беседы с другими пользователями. Это ограничение гема mailboxer (Mailboxer не предназначен для отправки сообщений только себе).

В конце концов, потребуется дополнительная логика в контроллере/представлении, если вам нужно поддерживать отправку сообщений только себе.

person richsinn    schedule 20.08.2014