【问题标题】:Rails 4: Creating point rules using merit gemRails 4:使用优点宝石创建积分规则
【发布时间】:2013-12-18 02:34:08
【问题描述】:

我正在将我的应用程序的投票和声誉系统从 activerecord-reputation-system 转换为 merit,因为后者似乎拥有更活跃的核心团队。

我正在尝试为我的应用中的问题和答案投票建立计分规则。理想情况下,当用户对问题进行投票时,规则会为问题本身以及问题的创建者分配分数。

point rules 的优点自述部分,我看到了这个例子:

score 15, on: 'reviews#create', to: [:reviewer, :reviewed]

我的理解是,本例中的:reviewerreviewed 是获得分配给它们的点数。但是,当我在自己的 point_rules.rb 中尝试此操作时:

score 10, :on => 'questions#vote', :to => :question 

我收到以下错误:

[merit] NoMethodError on `Question#question` (called from Merit::TargetFinder#other_target)

我知道我在这里遗漏了一些东西,但是有人可以告诉我它是什么吗?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 merit-gem


    【解决方案1】:

    优点是这样的:

    如果你定义了一个规则而没有指定谁,默认情况下会将积分分配给 current_user

    score 15, on: 'reviews#create' # This is for current_user
    

    如果您想将积分分配给 current_user 之外的用户,请指定它

    score 10, :on => 'questions#vote', to: :user
    

    在上面的例子中,:user 指的是方法question.user,他是问题的作者,与投票的 current_user 不同。

    在 OP 的情况下,实际上 ActiveRecord Reputation 和 Merit 用于不同的目的,不能完全互换。

    1. ARP 可用于所有型号,包括用户和非用户。 Meirt 仅供用户使用。

    2. Merit 有另一个徽章模块。 ARP 没有。

    3. Merit 有一个规则模块,您可以在其中定义所有规则,例如 CanCan。而在 ARP 中则没有这样的地方。

    4. 您将主要在 ARP 中处理模型。在 Merit 中,您将同时使用 Controller 和 Model。

    【讨论】:

    • 谢谢,比利。这似乎是我正在寻找的明确答案。是否有任何计划将优点扩展到用户之外?这似乎是一个常见的用例。
    • @DavidManaster,我很高兴能提供一点帮助。 Tute 是写这个很棒的宝石的人,而不是我:) 我只是一个用户。但我认为客观模型将来不太可能获得积分。毕竟 Merit 不是只针对积分,而是针对积分和徽章,只能适用于用户。
    【解决方案2】:

    此代码使用优点适用于我的项目。

    score 10, :on => 'questions#vote'
    
    score 10, :on => 'questions#vote', to: :user
    

    我同时使用了这两种方法,因为我不知道如何将它们结合起来。我的应用程序涉及对 cme​​ts 的投票,投票者对评论进行投票将获得 10 分,评论所有者也将获得 10 分。

    希望这会有所帮助。

    【讨论】:

    • 感谢@Justin 分享您的代码。正如你所描述的那样,这对我有用 - 选民和问题的所有者各得 10 分。我试图让问题本身而不是选民获得 10 分。你知道怎么指定吗?
    • 哦,对不起,我一定误解了这个问题。好吧,我还没有尝试过,但我怀疑你会为问题运行这个 - rails g merit MODEL_NAME,确保模型 has_merit 和 point_rules.rb - score 10, :on => 'questions#vote', to: [:user, :question]。不过我还没有测试过。
    • 我现在要测试一下,如果您还没有找到答案,我会回复您。
    • 我确实运行了 rails g merit MODEL_NAME 并且模型已经运行了 has_merit。当我尝试 score 10, :on => "questions#vote", to: [:user, :question] 时,它得到了与以前相同的错误 - [merit] NoMethodError on Question#question (called from Merit::TargetFinder#other_target)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    相关资源
    最近更新 更多