0

I'm making a Chat App using ActionCable and websocket.

But I cannot get room_id in asset/javascripts/channels/rooms.coffee

I want to get it like messages.data('room-id')

could you tell me the reason?

asset/javascripts/channels/rooms.coffee

jQuery(document).on 'turbolinks:load', ->
  messages = $('#messages')
  console.log(messages.data('room-id'))
  if $('#messages').length > 0
    App.room = App.cable.subscriptions.create {
     channel: "RoomChannel"
     room_id: messages.data('room-id')
    },
    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) ->
      $('#messages').append data['message']

    speak: (message, room_id) ->
      @perform 'speak',  message: message, room_id: room_id

   $(document).on 'keypress', '[data-behavior~=room_speaker]', (event) -> 
     if event.keyCode is 13 # return/enter = send 
       App.room.speak event.target.value
       event.target.value = '' 
       event.preventDefault()

/view/rooms/show.html

<h1><%= @room.title %></h1>
<div id="messages", data-room-id="<%= @room.id %>">
  <%= render @room.messages %>
</div>

<form>
  <label>Say something:</label><br>
  <input type="text" data-behavior="room_speaker">
  <hidden> fa</hidden>
</form>

/channels/room_channel.rb

class RoomChannel < ApplicationCable::Channel
  def subscribed
    stream_from "room_#{params[:room_id]}_channel"
  end

  def unsubscribed
    # Any cleanup needed when channel is unsubscribed
  end

  def speak(data)
    current_user.messages.create!(content: data['message'], room_id: data['room-id'])
  end
end
Jainish Kapadia
  • 2,603
  • 5
  • 18
  • 29
yosumkty
  • 11
  • 1

1 Answers1

0

I have wrong space in /view/rooms/show.html

<div id="messages", data-room-id="<%= @room.id %>">

<div id="messages", data-room-id="<%= @room.id %>">

this is correct.

yosumkty
  • 11
  • 1