使用ActionCable部分错误地呈现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用ActionCable部分错误地呈现相关的知识,希望对你有一定的参考价值。

我有一个基本的聊天应用程序,通过ActionCable发送消息。我试图将消息分类到左/右,具体取决于谁发送了它,就像Facebook的Messenger应用程序一样。我试图用我发送的部分(_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

答案

所以我最终制作了两个部分并用Actioncable广播它们然后让JQuery在接收到的函数中决定渲染哪一个。此外,每个用户的ID都作为数据存储在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})

以上是关于使用ActionCable部分错误地呈现的主要内容,如果未能解决你的问题,请参考以下文章

Rails API 应用程序中 ActionCable 的 Websocket 客户端

让AuthLogic使用ActionCable

Websocket握手期间的Rails ActionCable错误

ElasticBeanstalk 中的 ActionCable 失败并出现无法追踪的错误

如何使用 ActionCable 作为 API

如何使用列表视图在选项卡式活动的片段中呈现 SQLite 表数据 [重复]