Shk*_*rik 3 ruby ruby-on-rails rails-activerecord
我有3种型号:Post,Comment,User
Post 有很多 Comments
Comment 属于 User
User 有领域 country_code
我想获得按国家/地区代码分组的所有帖子评论,并按每个国家/地区的评论数量排序.
这个查询:
post.comments.joins(:user).group("users.country_code").order('count_all desc').count
Run Code Online (Sandbox Code Playgroud)
返回这样的结果:
{"DE"=>67,
"US"=>8,
"RS"=>8,
"IN"=>8,
"ES"=>7,
"BR"=>6,
...
"UA"=>0
Run Code Online (Sandbox Code Playgroud)
}
我需要的是一个类似的结果,其中国家代码是键,但值是注释数组.我不知道如何实现这一目标.
您可以使用Ruby枚举模块附带的group_by
post.comments.group_by{ |c| c.user.country_code }
Run Code Online (Sandbox Code Playgroud)
如果您还希望按每个组中的评论数量排序,也可以:
post.comments.group_by{ |c| c.user.country_code }.sort_by{ |k, v| v.length }
Run Code Online (Sandbox Code Playgroud)
我想在相反的方向上进行排序,你可以-1在排序块中乘以长度.
post.comments.group_by{ |c| c.user.country_code }.sort_by{ |k, v| v.length * -1 }
Run Code Online (Sandbox Code Playgroud)
尝试这样的事情:(未经测试):
post.comments.joins(:users).select("users.country_code, count(1) as count_all").group("users.country_code").order('count_all desc')
Run Code Online (Sandbox Code Playgroud)