例如,在以下作业中最初调用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
那么调用作业的位置,以及如何将参数传递给它? (具体来说,我有一个房间频道ID,我已经通过参数传递给room_channel.rb
,但也需要在执行动作中通过相关的房间频道进行广播。
谢谢!
答案 0 :(得分:1)
在模型中,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
由于消息的所有属性都可用。