Я работаю над приложением чата в реальном времени и не могу заставить работать Action Cable. Я следовал за документацией , но я должен что-то упустить.
Вот мой код:
#groups_channel.rb
class GroupsChannel < ApplicationCable::Channel
def subscribed
stream_from "group_#{params[:group_id]}"
end
end
#<!-- app/views/groups/show.html.erb -->
<!-- ... -->
<% content_for :after_js do %>
<script>
App['group_<%= @group.id %>'] = App.cable.subscriptions.create(
{ channel: 'GroupsChannel', group_id: <%= @group.id %> },
{ received: (data) => {
const messagesContainer = document.querySelector('.messages-tab-content');
messagesContainer.insertAdjacentHTML('beforeend', data.message_box);
scrollLastMessageIntoView();
})
</script>
<% end %>
# app/models/message.rb
class Message < ApplicationRecord
after_create :broadcast_message
# ...
def broadcast_message
ActionCable.server.broadcast("group_#{self.group.id}", {
message_partial: ApplicationController.renderer.render(
partial: "groups/message_box",
locals: { message: self }
),
})
end
end
Вот что у меня в консоли.
Кажется, подписки нет, хотя я заставляю кабельную подписку на строку выше.
Любые выводы будут действительно полезны.