0

次のクエリを使用して、レコードのリストを返します

Rating.find(:all, :conditions => ["rating_set = ? and product_id = ?", 1, 2186417])

これは次を返します:

[#<Rating id: 5, label: "Good", rating: 3.0, created_at: "2013-02-20 08:11:36", updated_at: "2013-02-20 08:11:36", recommendation_id: 2186417, notes: "exact match", rating_set: 1, product_id: 2186417>, #<Rating id: 6, label: "Good", rating: 3.0, created_at: "2013-02-20 08:11:36", updated_at: "2013-02-20 08:11:36", recommendation_id: 2054442, notes: "", rating_set: 1, product_id: 2186417>, #<Rating id: 7, label: "Fair", rating: 2.0, created_at: "2013-02-20 08:11:36", updated_at: "2013-02-20 08:11:36", recommendation_id: 2403501, notes: "", rating_set: 1, product_id: 2186417>, #<Rating id: 8, label: "Bad", rating: 3.0, created_at: "2013-02-20 08:11:36", updated_at: "2013-02-20 08:11:36", recommendation_id: 2344645, notes: "", rating_set: 1, product_id: 2186417>]

各評価ラベルのカウントを取得するにはどうすればよいですか。たとえば、合計の中で「良い」レコードがいくつあるか、「悪い」レコードがいくつあるかなどです。

4

2 に答える 2

2

少なくとも 2 つの方法でそれを行うことができます。

SQL

klass = Rating.where(rating_set: 1, product_id: 2186417])
good_count = klass.where(label: 'Good').count
bad_count = klass.where(label: 'Bad').count

配列

ratings = Rating.where(rating_set: 1, product_id: 2186417]).all
good_count = ratings.count { |r| r.label == 'Good' }
bad_count = ratings.count { |r| r.label == 'Bad' }
于 2013-02-22T02:14:41.440 に答える
0

次の方法でグループを試すことができます。

Rating.where(:rating_set => 1, :product_id => 2186417).group(:label).count.each{ |k,v| puts "#{k} #{v}" }

リソース: http://guides.rubyonrails.org/active_record_querying.html#group

于 2013-02-22T05:58:16.310 に答える