たとえば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
がありますが、関連するルーム チャネルからブロードキャストするには、実行アクションでこれを取得する必要もあります。
ありがとう!