Rails:仅使用ID查找对象

时间:2013-08-19 15:49:31

标签: ruby-on-rails sidekiq

我正在构建一个使用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而不必澄清与该对象一起的类?

1 个答案:

答案 0 :(得分:1)

我不知道什么算得上“更好”,但你可以传递对象本身并让你的工作者查询它的id和它的类。