Частичное неверное отображение с помощью ActionCable - PullRequest
0 голосов
/ 10 февраля 2019

У меня есть базовое приложение чата, которое отправляет сообщения через ActionCable.Я пытаюсь отсортировать сообщения влево / вправо в зависимости от того, кто их отправил, почти как приложение для обмена сообщениями Facebook.Я пытаюсь добиться этого с помощью базовой логики в части (_message.html.erb), которую я отправляю:

<%if message.user_id == current_user.id %> 
//message is to the right with inline CSS
<% else°%>
// message is to the left with inline CSS
<% end°%>

Это прекрасно работает, если кто-то перезагружает страницу, но когда приложение используется, всеновые сообщения, отправленные через ActionCable, отправляются справа.

Я проверил партиал, который отправляется, и кажется, что

<%if message.user_id == current_user.id %> 

работает на стороне пользователя, а затем всегда отправляется первая часть партила, но не весь _message.html.erb.Можно ли вместо этого отправить весь фрагмент и убедиться, что

<%if message.user_id == current_user.id %>

запускается при получении сообщения всеми подписанными пользователями?

Контроллер сообщений:

if @message.save
  RoomChannel.broadcast_to @room.id, message: 
  MessagesController.render(partial: 'messages/message', locals: {message: 
  @message, current_user: current_user})

room.js:

received: function (data) {
    $('.messages').append(data.message);
}

Если понадобятся какие-либо дополнительные части кода, пожалуйста, спросите или: https://github.com/TTARJAN/chatApp

1 Ответ

0 голосов
/ 10 февраля 2019

Итак, в итоге я сделал два партиала и транслировал их с помощью Actioncable, а затем позволил JQuery решить в полученной функции, какую из них визуализировать.Кроме того, идентификатор каждого пользователя хранится в виде данных в HTML для сравнения.Код ниже:

 var userId = $('#noBGR').attr('data-user-id');
    if (parseInt(userId) === data.id){
        $('.messages').append(data.msg_user);
    }else{
        $('.messages').append(data.message);
    }


RoomChannel.broadcast_to @room.id, id: @message.user_id, message: 
MessagesController.render(partial: 'messages/message', locals: {message: @message, 
current_user: current_user}), msg_user: MessagesController.render(partial: 
'messages/message_user', locals: {message: @message, current_user: current_user})
...