Rails如何订购列总和查询?

时间:2019-04-18 01:47:23

标签: ruby-on-rails

我想对演讲进行排名。 推荐型号有用户和数量。

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”?

1 个答案:

答案 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 }