2

我正在使用优点 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

我在 User 模型中创建了一个方法“model_method”,它做同样的事情helper_method,所以我可以毫无问题地做到这一点:

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

我想知道是否有某种方法可以在后台使用 delay_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

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

4

1 回答 1

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 。

于 2014-09-16T13:54:04.863 回答