2016-10-13 57 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

我最終呈現從chat.coffee文件中的客戶端的消息,首先從消息的形式獲得用戶ID

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() 

我不真的很喜歡它,因爲我已經寫了部分消息。如果有人有更好的方法,我真的很想聽到它。