2015-05-26 78 views
0

我有型号Gif,其中有has_many gif_statisticsGifStatistic模型有字段status可能的选项:likedislike。 我有像 Gif.joins(:gif_statistics).where(...)查询。我想订购这个查询取决于liked gif_statistics or不喜欢的数量,例如。按关联表项数排序

Gif.joins(:gif_statistics).where(...).order("gifs.gifs_statistics.where(state: "liked").count)")

我试图申请sort方法,但没有奏效。我还有什么可以尝试做到这一点?此外,我只有通过计数订单后where条款

+0

为了这个查询。没有得到你..显示你的完整查询.. –

回答

0

试试这个:

Gif.joins(:gif_statistics).where(...).order('gif_statistics.status DESC') 

这样的查询将返回gif_statistics.status订购照片与图像。按照喜欢/不喜欢的字母顺序使用DESC或ASC。

1

请让我试试答案。我一定会用直接的SQL来做这件事。你总是可以用Ruby和数组和地图来做你的聚合,但是这会产生糟糕的性能。这里是你的SQL查询(请纠正任何错误,因为我没有你的模式,因此我无法测试它)。

select g.id, s.status, count(s.status) cnt 
from gifs g 
inner join gif_statistics s 
    on g.id = s.gif_id 
group by g.id, s.status 
order by cnt 

现在看到这个文档,以红宝石运行SQL:根据任尤其爱吃gif_statisticsordisliked计数

http://guides.rubyonrails.org/active_record_querying.html#finding-by-sql