在DelayedJob中存储未评估的ActiveRecord查询

时间:2010-12-10 04:05:43

标签: ruby-on-rails ruby activerecord delayed-job delayed-execution

我想安排一个包含活动记录查询(或多个条件)的延迟作业,这些查询将在作业实际运行时进行评估。

实施例。我有一个自定义作业生成并向用户发送通知。 我想将参数/查询/条件发送到作业,该作业将过滤发送通知的用户。

我可以评估一个字符串,但这看起来很难看。

该项目正在使用Rails 2.3.5,因此我无法使用Arel路线。

我看到有关Ambition的内容,但自2008年以来什么都没有,所以我不确定该项目的状态。

建议?

1 个答案:

答案 0 :(得分:1)

您可以在创建条件时将条件等作为哈希发送到作业,然后像使用ActiveRecord一样使用它。也许是这样的:

class NotificationJob < Struct.new(:message, :query)

  def perform
    @users = User.all(query)
    ...
  end

end

然后你就像这样创建Job:

query = {:conditions => ["users.company_id = ?", @company.id]}
Delayed::Job.enqueue(NotificationJob.new("There is no cake",query), 0, Time.now)

如果这不适合你,那么也许你可以提供当前的代码。