【问题标题】:Delaying Badge Assignment Using delayed_job and tute/merit使用delayed_job 和tute/merit 延迟徽章分配
【发布时间】:2014-11-08 14:39:27
【问题描述】:

我正在使用功绩宝石为用户分配徽章。

在我的 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”,它与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

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

【问题讨论】:

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


    【解决方案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

    【讨论】:

    • 谢谢!我刚刚完成了一项自定义徽章工作。今后我会牢记这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 1970-01-01
    • 1970-01-01
    • 2016-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多