0

モデルはとVoteですIssueIssue has_many :votes。ユーザーが問題に投票すると、Issuesインデックスのいずれかまたは非表示のフォームでVote埋められるSTI列タイプがあります。いずれかのタイプまたは特定の問題の投票数を確認するにはどうすればよいですか?現在、私は次のようなモデルでメソッドを使用しています。:Upvote:DownvoteUpvoteDownvoteIssue

 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うまくいかないことを知っています。

4

1 に答える 1

0

いくつかのオプションがあります。クラスで追加の関連付け(またはメソッド)を定義するか、Issueクラスで使用scopeVoteます。これらの例はRails3を想定していますが、Rails2.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.upvotesにしissue.downvotesます。問題の賛成票の数を取得するには、この場合はissue.upvotes.countです。

  2. スコープVote

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

    投票のスコープupdownスコープは、投票関係のメソッドを提供するため、とを呼び出すことができissue.votes.upますissue.votes.down。問題の賛成票の数を取得するのは簡単issue.votes.up.countです。

于 2012-10-10T03:25:45.557 に答える