Я настраиваю ActionCable для моего канала чата в рельсах.
Проблема в том, что каждый раз, когда вошедший в систему пользователь отправляет сообщение, скажем, UserA, сообщение не будет добавлено в чат.Я пытался одновременно войти в систему другого пользователя, скажем, UserB, сообщение от UserB было добавлено в чат UserA, но не в userB, и наоборот.
/ app / channel / chatroom_channel.rb
class ChatroomChannel < ApplicationCable::Channel
def subscribed
stream_from "chatroom_channel"
end
def unsubscribed
# Any cleanup needed when channel is unsubscribed
end
end
/ app / assets / javascripts / channel / chatroom.coffee
App.chatroom = App.cable.subscriptions.create "ChatroomChannel",
connected: ->
# Called when the subscription is ready for use on the server
disconnected: ->
# Called when the subscription has been terminated by the server
received: (data) ->
alert data
$('#messages').append(data)
$('#message_content').val = ''
scrollToBottom()
return
scrollToBottom = ->
if $('#messages').length > 0
last_message = $('#messages')[0]
last_message.scrollTop = last_message.scrollHeight - (last_message.clientHeight)
$(document).ready ->
scrollToBottom()
return
jQuery(document).on 'turbolinks:load', ->
scrollToBottom()
return
# Called when there's incoming data on the websocket for this channel
Это часть моего чата: /app/views/chatrooms/index.html.erb
<div class="twelve wide column">
<div class="ui fluid raised card chatbox">
<div class="content">
<div class="ui feed" id="messages">
<%= render @messages %>
</div>
</div>
<div class="extra content">
<%= form_for(@message, html: {class: "ui reply form", role: "form"}, url: message_path) do |f| %>
<div class="field">
<div class="ui fluid icon input">
<%= f.text_field :body, id: "message_content"%>
<%= f.button '<i class="bordered inverted orange edit icon"></i>'.html_safe %>
</div>
</div>
<% end %>
</div>
</div>
</div>
Я изменил разработку с async
на redis
в config/cable.yml
, но все равно не справился.Спасибо, что прочитали заранее