【发布时间】: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