我想对演讲进行排名。 推荐型号有用户和数量。
rank / user_name / recommend_count
1 / A / 4
2 / B / 2
3 / C / 1
代码
@top_recommenders = Array.new
recommends = Recommend.group(:user_id).order("sum_count DESC").limit(10).sum(:count)
recommends.each do |recommend|
recommend = Recommend.where(user_id: recommend[0]).first
recommend.count = recommend[1]
@top_recommenders << recommend
end
模式
create_table "recommends", force: :cascade do |t|
t.integer "user_id"
t.integer "recommender_id"
t.integer "count"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["recommender_id"], name: "index_recommends_on_recommender_id"
end
那行得通,但并不完美。 如何按“用户”查询分组并订购“ sum_count”?
答案 0 :(得分:0)
@top_recommenders = Recommend.select('recommends.*,SUM(count) as count_total').group(:user_id).order("count_total DESC").limit(10)
计数总和将作为count_total存储在查询结果中。 如果您需要将其存储为每个推荐对象的数量,请按如下所示进行映射。
@top_recommenders.map { |r| r.count = r.count_total }