Rails Mailboxer/ Messaging - возвращать только непустые массивы

Я использую гем почтового ящика для создания системы личных сообщений.

Я хочу перебрать свой список пользователей и рядом с именем каждого пользователя предоставить ссылку, чтобы открыть ранее существовавшую беседу, если она существует, или создать новую, если беседы не существует. (Таким образом, пользователи смогут вести только 1 беседу с другим пользователем, а не по электронной почте).

<% @users.each do |u| %>
  <%= link_to u.name, u %>
  <% @mailbox.conversations.each do |c| %>
    <% if c.receipts.where(:receiver_id => user).present? %>
     true
    <% else %>
     false
    <% end %>
  <% end %>
<% end %>

таким образом "true" будет ссылкой для возобновления разговора, а "false" будет кнопкой для нового разговора.

но если у пользователя 4 разговора и 1 с данным пользователем, он вернет true false false false false. поэтому 1 кнопка продолжения и 3 создания нового. по сути, мне нужно все, чтобы вернуть либо истину, либо ложь

1 ответ

Решение

Если кому-то интересно, это более элегантное решение. просто в контроллере. тогда все ссылки одинаковы, и он откроет сообщение, если оно существует. фильтрация по беседе. участник (а). участник (б) был ключевым

def new
  @recipient = User.find(params[:recipient])
  @ongoing_conversation = Conversation.participant(current_user).participant(@recipient)

  respond_to do |format|
    format.html { redirect_to root_path }
    if @ongoing_conversation.present?
      format.js { redirect_to mailbox.conversations.find(@ongoing_conversation) }
    else
      format.js
    end
  end
end
Другие вопросы по тегам