【问题标题】:Active record reputation system - how to check value of current_user's voteActive Record 信誉系统 - 如何检查 current_user 的投票值
【发布时间】:2014-01-17 11:45:47
【问题描述】:

我正在使用 Active Record Reputation System gem 并允许用户对特定列表进行投票。我目前能够通过以下方式检查用户是否对列表进行了投票:

if current_user && listing.has_evaluation?(:votes, current_user)

这告诉我使用用户是否投票,但我需要类似的逻辑来告诉我他们是否对特定列表投了赞成票或反对票。有什么想法吗?相关代码如下:

在列表模型中:

has_reputation :votes, source: :user, aggregated_by: :sum

在列表控制器内

  def vote
    value = params[:type] == "up" ? 1 : -1
    listing = Listing.find(params[:id])
    listing.add_or_update_evaluation(:votes, value, current_user)
    redirect_to :back, notice: "Thank you for voting"
  end

【问题讨论】:

  • 你有没有找到一种方法来检查用户是否对列表投了赞成票或反对票?弄清楚他们是否对该项目进行了投票很容易,但我不明白如何检索实际值。
  • 我最终将投票设为“1”(喜欢),如果用户返回并且不喜欢我的控制器中的项目(listing.delete_evaluation(:votes, current_user),),我会破坏原始评估.使用此逻辑,您可以执行以下操作来确定他们是否“喜欢”您的项目:@listing.has_evaluation?(:votes, current_user)。希望对您有所帮助。
  • 我明白了,所以你的设置不允许downvoting (-1),只是喜欢和不喜欢?我的麻烦是 has_evaluation 返回真/假,而不是实际值(+1 或 -1)。还是谢谢!

标签: ruby-on-rails activerecord rating-system


【解决方案1】:

确定该值的目的是为了显示当前用户是否喜欢某个特定页面。 @thing.has_evaluation?(:reputation_name, :source) 不起作用,因为即使用户喜欢然后不喜欢,它也会将页面显示为“喜欢”。

如果有人遇到这种情况,你可以通过调用delete_evaluation方法删除作为源级别的评价,然后从系统中删除用户之前的喜欢/不喜欢/投票等,就像他们从未投票一样。

p>

如果您有二元投票过程,则主要有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多