我正在将我的应用的投票和声誉系统从activerecord-reputation-system转换为merit,因为后者似乎有一个更活跃的核心团队。
我正在尝试为我的应用中的问题和答案建立投票点规则。理想情况下,当用户对某个问题进行投票时,该规则会为问题本身以及问题的创建者分配点数。
关于point rules的优点自述部分,我看到了这个例子:
score 15, on: 'reviews#create', to: [:reviewer, :reviewed]
我的理解是,此示例中的:reviewer
和reviewed
是获得分配给它们的点的那些。但是,当我在我自己的point_rules.rb中尝试这个时:
score 10, :on => 'questions#vote', :to => :question
我收到以下错误:
[merit] NoMethodError on `Question#question` (called from Merit::TargetFinder#other_target)
我知道我在这里遗漏了一些东西,但有人可以告诉我它是什么吗?
答案 0 :(得分:3)
此代码适用于我的项目使用优点。
score 10, :on => 'questions#vote'
score 10, :on => 'questions#vote', to: :user
我使用了两者,因为我不确定如何将它们组合起来。我的应用程序涉及评论投票,选民将获得10分投票评论,评论所有者也获得10分。
希望这有帮助。
答案 1 :(得分:3)
Merit的工作原理如下:
如果您定义的规则未指定给谁,则默认情况下会将这些点分配给current_user
score 15, on: 'reviews#create' # This is for current_user
如果要为current_user之外的用户分配点,请指定
score 10, :on => 'questions#vote', to: :user
在上面的示例中,:user
指的是方法question.user
,该方法是问题的作者,与投票的当前用户不同。
在OP的情况下,实际上ActiveRecord的声誉和功绩是出于不同的目的,不能完全互换。
ARP可用于所有型号,包括用户和非用户。 Meirt仅供用户使用。
Merit还有另一个徽章模块。 ARP没有。
Merit有一个Rule模块,您可以在一个地方定义所有规则,如CanCan。在ARP中没有这样的地方。
您将主要在ARP中处理模型。在Merit中,您将使用Controller和Model。