たとえばperform
、次のジョブで最初に呼び出されるメソッドはどこにありますか。
jobs / 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
では、ジョブはどこから呼び出され、どのようにパラメーターをジョブに渡すことができますか?(具体的には、room_channel.rb
パラメーターを介して既に渡したルームチャネルIDを持っていますが、関連するルームチャネルからブロードキャストするには、実行アクションでこれを取得する必要もあります。
ありがとう!
モデルでは、 models/message.rb
after_create_commit { MessageBroadcastJob.perform_later self }
メッセージの作成後、ジョブをキューに入れます。したがって、ジョブファイルでは、オブジェクト自体(この場合はメッセージ)を介してパラメータにアクセスできます。
具体的には、この場合は次のようになります。
def perform(message)
ActionCable.server.broadcast "room_channel_#{message.room_id}", message: render_message(message) #, roomId: roomId
end
メッセージのすべての属性が使用可能であるため。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加