1

たとえばperform、この次のジョブで最初に呼び出されたメソッドは次の場所にあります。

ジョブ/message_broadcast_job.rb

class MessageBroadcastJob < ApplicationJob
  queue_as :default

  def perform(message)
    ActionCable.server.broadcast "room_channel", message: render_message(message) #, roomId: roomId
  end

  private
    def render_message(message)
      ApplicationController.renderer.render(partial: 'messages/message', locals: { message: message })
    end
end

assets/javascripts/channels/room.coffee にはメソッド呼び出しがあります:

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

しかし、これは channels/room_channel.rb で対応するメソッドを呼び出しているようです:

def speak(data)
     Message.create! text: data['message'], user_id: 1, room_id: data['roomId']
  end

では、ジョブはどこから呼び出され、どのようにパラメーターを渡すことができますか? (具体的には、パラメーターを介して既に渡したルーム チャネル IDroom_channel.rbがありますが、関連するルーム チャネルからブロードキャストするには、実行アクションでこれを取得する必要もあります。

ありがとう!

4

1 に答える 1