使用delayed_job和tute / merit延迟徽章分配

时间:2014-09-15 06:11:02

标签: ruby-on-rails delayed-job observers merit-gem

我正在使用优点宝石为用户分配徽章。

在我的badge_rules.rb文件中,我有:

  module Merit
    class BadgeRules
      include Merit::BadgeRulesMethods
      include UserHelper

      def initiate
        grant_on 'users#update_badges', :badge => "Badge Name" do |user|
          helper_method(user) == foo
        end
      end

    end
  end

我创建了一种方法' model_method'在User模型中与helper_method执行相同的操作,因此我可以毫无问题地执行此操作:

  grant_on 'users#update_badges', :badge => "Badge Name" do |user|
    user.model_method == foo
  end

我想知道是否有某种方法可以在后台使用delayed_job运行此过程,因为helper_method非常繁重。我已经尝试过在后台运行model_method的以下内容,但没有授予徽章:

  grant_on 'users#update_badges', :badge => "Badge Name" do |user|
    user.delay.model_method == foo
  end

  handle_asynchronously :initialize

  def initialize 
    grant_on 'users#update_badges', :badge => "Badge Name" do |user|
      helper_method(user) == foo
    end
  end

检查grant_on block&条件是否满足的优点宝石中的代码没有延迟,所以我不确定如何解决这个问题。提前谢谢。

1 个答案:

答案 0 :(得分:1)

请参阅checks_on_each_request选项,该选项禁用同步计算:https://github.com/tute/merit/blob/master/lib/generators/merit/templates/merit.rb#L3-L4

您可以稍后在类似于排名规则的cron作业中计算它们:https://github.com/tute/merit#defining-rules-2