0

メールボックスの gem を使用して、プライベート メッセージング システムを構築しています。

ユーザー リストをループし、各ユーザー名の横に、既存の会話が存在する場合はその会話を開くリンクを提供し、会話が存在しない場合は新しい会話を作成するリンクを提供します。(そのため、ユーザーは、電子メールのようなシステムではなく、別のユーザーと 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 が返されます。1 つの続行ボタンと 3 つの新規作成ボタンです。基本的に、trueまたはfalseのいずれかを返すために全体が必要です

4

1 に答える 1

0

誰かが興味を持っているなら、これはよりエレガントなソリューションです。ちょうどコントローラーで。すべてのリンクは同じで、存在する場合はメッセージが開きます。Conversation.participant(a).participant(b) によるフィルタリングが鍵でした

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
于 2012-12-02T01:44:10.313 に答える