I am new to ActionCable in Rails 5. I am trying to make a chat for my Rails app. When I try and send a test message through the console App.room.speak('Test!') but when I do I get an error. 
Uncaught ReferenceError: App is not defined at :1:1
room.coffe
App.room = App.cable.subscriptions.create "RoomChannel",
  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) ->
  # Called when there's incoming data on the websocket for this channel
  $('message').append data
  speak: (message)->
  @perform 'speak', message: message
room_channel.rb
class RoomChannel < ApplicationCable::Channel
   def subscribed
     stream_from "room_channel"
   end
   def unsubscribed
      # Any cleanup needed when channel is unsubscribed
   end
   def speak (data)
     Message.new content: data['message'], user: current_user
   end
end
broadcast_message_job.rb
class BroadcastMessageJobJob < ApplicationJob
   queue_as :default
   def perform(meesage)
     ActionCable.server.broadcast 'room_channel', render_message(message)
   end
   private
   def render_message(message)
     ApplicationController.renderer.render message
   end
end
cable.js
(function() {
   this.App || (this.App = {});
   App.cable = ActionCable.createConsumer();
}).call(this);
routes.rb
mount ActionCable.server => '/cable'
Make sure you've added the require_self in the cable.js file:
// app/assets/javascripts/cable.js
//= require action_cable
//= require_self
//= require_tree ./channels
(function() {
  this.App || (this.App = {});
  App.cable = ActionCable.createConsumer();
}).call(this);
This will add the content from this same cable.js file, if you've defined the App in other file, then you'll need to add it in the "require" section.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With