我正在使用优点宝石为用户分配徽章。
在我的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&
条件是否满足的优点宝石中的代码没有延迟,所以我不确定如何解决这个问题。提前谢谢。
答案 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。