2

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

helper_methodこのプロセスはかなり重いため、delayed_job を使用してバックグラウンドで実行する方法があるかどうかを知りたいです。バックグラウンドで 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&遅延していないため、この問題にどのようにアプローチするかはよくわかりません。前もって感謝します。

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 に答える