我正在Rails中创建一个实时聊天应用程序,但我无法区分每个用户发送的消息。在我的消息部分中,我使用current_user会话将.current-user或.other-user应用于每条消息。
_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 :(得分:0)
我最终从chat.coffee文件在客户端呈现消息,首先从消息表单中获取用户ID
*args
然后
user_id = parseInt($('#message_user_id').val())
我不是很喜欢它,因为我已经将信息写成了部分内容。如果有人有更好的方法,我真的很想听。