簡體   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