繁体   English   中英

Rails STI。 如何计算关联模型的Upvote或Downvote类型的投票数?

[英]Rails STI. How do I count the number of votes of type Upvote or Downvote for associated model?

模型是VoteIssue Issue has_many :votes Vote具有一个STI列类型,当用户对某个问题进行投票时,该列会以“问题”索引上的隐藏形式填充:Upvote:Downvote 如何找到给定问题的UpvoteDownvote类型的票数? 现在,我正在Issue模型上使用如下方法:

 def upvotes_count(issue_id)
     Upvote.count(:conditions => "issue_id = #{issue_id}")
 end

def downvotes_count(issue_id)
      Downvote.count(:conditions => "issue_id = #{issue_id}")
end

当我循环浏览Issues索引上的所有问题时,我从视图中传递了issue_id,如下所示:

issue.upvotes_count(issue.id)

这是对的还是有更好的方法? 似乎我已经在实例上进行操作时,似乎不必传递ID。 我在控制台中玩过,试图找出答案,但无法弄清楚。 我知道@issue.Upvote.count不起作用。

您有两个选择:在Issue类中定义其他关联(或方法),或在Vote类中使用scope 这些示例假设使用Rails 3,尽管可以轻松地针对Rails 2.3进行调整。

  1. Issue其他关联:

     class Issue < ActiveRecord::Base has_many :votes has_many :upvotes, :class_name => "Vote", :conditions => ['type = ?', 'Upvote'] has_many :downvotes, :class_name => "Vote", :conditions => ['type = ?', 'Downvote'] end 

    在这里,我们添加了一些条件来优化问题的相关投票结果,因此您可以调用issue.upvotesissue.downvotes 在这种情况下,要获得对事件的赞成票数,就是issue.upvotes.count

  2. Vote范围:

     class Vote scope :up, where(:type => 'Upvote') scope :down, where(:type => 'Downvote') end 

    投票中的updown作用域提供了有关投票关系的方法,因此您可以调用issue.votes.upissue.votes.down 要获得对某个问题的支持票数,只需issue.votes.up.count

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM