2016-10-13 5 views
2

私はRailsでリアルタイムのチャットアプリケーションを作成していますが、各ユーザーから送信されたメッセージを区別するのに問題があります。私のメッセージの部分では、current_userセッションを使用して.current-userまたは.other-userを各メッセージに適用します。ActionCableでリアルタイムでレンダリングされた部分でセッション変数を使用

_message.html.erb 

<% if msg.text.present? %> 
    <% if msg.user_id == current_user.id %> 
     <p class="current-user msg"><%= msg.text %></p> 
    <% else %> 
     <p class="other-user msg"><%= msg.text %></p> 
    <% end %> 
<% end %> 

新しいメッセージがメッセージコントローラ

class MessagesController < ApplicationController 
...  
def create 
    @chat = Chat.find(params[:chat_id]) 
    @message = @chat.messages.build(message_params) 
    if @message.save 
     ActionCable.server.broadcast "chat_channel", 
             message: render_message(@message) 
    end 
end 
... 
private 
    def render_message(msg) 
     render(partial: 'message', locals: { msg: msg }) 
    end 

とJavaScript

chats.coffee 
received: (data) -> 
       $('#messages').append data.message 
       $('#message_text').val('') 
       messages_to_bottom() 

とメッセージリストに追加さから放送されている私はほとんどそれが働い持っているが、それは= CURRENT_USERのように見えます常にmsg.user_id。したがって、他のユーザーからのメッセージでさえも、現在のユーザークラスでレンダリングされています。これらのメッセージを正しく表示する方法はありますか?

答えて

0

私が最初に私にはありませんメッセージフォーム

user_id = parseInt($('#message_user_id').val()) 

、その後

received: (data) -> 
       if user_id == data.user_id 
        $('#messages').append "<div class='current-user msg'>" + data.text + "</div>" 
       else 
        $('#messages').append "<div class='other-user msg'>" + data.text + "</div>" 
       $('#message_text').val('') 
       messages_to_bottom() 

からユーザIDを取得し、chat.coffeeファイルからクライアント側にメッセージをレンダリングすることになりました私はすでに部分的なメッセージを書いているので、本当に好きです。誰かがより良い方法を持っているなら、私は本当にそれを聞きたい。

関連する問題