我正在构建一个使用 PublicActivity gem ( https://github.com/pokonski/public_activity ) 的应用程序,虽然这个 gem 是拥有类似“Facebook”的活动流的好方法,但它的价格也很低;数据库加载时间。
为了帮助缩短加载时间,我将处理卸载到我的Sidekiq
处理器,如下所示:
ActivityLogWorker.perform_async object_id: @video.id, klass: :video, owner_id: @athlete.id, activity: :create
这是我的工人:
class ActivityLogWorker
include Sidekiq::Worker
sidekiq_options queue: :activity_log
def perform(opts = {})
obj = "#{opts.delete('klass')}".capitalize.constantize.find(opts.delete('object_id'))
owner = User.find(opts.delete('owner_id'))
activity = opts.delete('activity').to_sym
obj.create_activity activity, owner: owner
end
end
有没有更好的方法来传递,object_id
而不必澄清与该对象一起使用的类?