class Notifications::FanoutJob < ApplicationJob
queue_as :default
def perform(notification_id)
notification = Notification.find(notification_id)
notification.recipients.find_each do |member|
Notifications::DeliverJob.perform_later(notification.id, member.id)
end
end
end
Jobs should accept simple primitives (IDs, strings), not full objects. It avoids serialization surprises and makes jobs resilient across deploys. This also reduces job payload size.