Activerecord-reputation-system - 如何检查current_user投票的值

时间:2014-04-18 19:23:48

标签: ruby-on-rails ruby activerecord ruby-on-rails-4

我正在检查用户是否对某个帖子投了票,然后更改了向上和向下箭头的样式。 activerecord-reputation-system gem暂时没有更新,我找到的每个例子都使用过时的代码或者需要分别跟踪“向上”投票和“向下”投票。我更喜欢使用:post_votes并检查该参数的值。

posts_controller.rb

@voted_items = Post.evaluated_by(:post_votes, current_user)

index.html.erb

<% if current_user && @voted_items.include?(post) %>
  # display active up or down arrows
<% end %>

如何获得@voted_items对象中相关记录的值?

编辑:我注意到:value没有内置范围。也许手动添加一个会让我查询一个特定的值吗?

1 个答案:

答案 0 :(得分:0)

现在我在模型上想出了这个方法def:

def evaluation_value(user, comment)
  if @up_voted = ReputationSystem::Evaluation.where(:reputation_name => "comment_votes", 
      :value => "1.0", :source_id => user.id, :source_type => user.class.name,
      :target_id => comment.id, :target_type => comment.class.name).exists?
    "upvoted"
  elsif @down_voted = ReputationSystem::Evaluation.where(:reputation_name => "comment_votes", 
      :value => "-1.0", :source_id => user.id, :source_type => user.class.name,
      :target_id => comment.id, :target_type => comment.class.name).exists?
    "downvoted"
  else
    nil
  end
end  

它并不理想,因为它需要对值和其他细节进行硬编码,但它现在可以使用,直到更新gem以允许检查单个值。

这样我可以运行comment.evaluation_for(current_user, comment) == "upvoted"或downvoted。