2016-10-13 3 views
2

Я делаю приложение чата в реальном времени в Rails, и у меня возникают проблемы с различиями между сообщениями, отправленными каждым пользователем. В частичном сообщении я использую сеанс current_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, первым получает идентификатор пользователя от формы сообщения

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

Я не действительно нравится, потому что я уже написал сообщение частично. Если у кого-то есть лучший способ, я бы очень хотел это услышать.

 Смежные вопросы

  • Нет связанных вопросов^_^