栏在网站上按喜欢的次数排序

问题描述

|| 我有一个名为“ 0”的网站模型,当然还有另一个名为“ 1”的“喜欢”模型。我想获取所有网站的阵列,但按喜欢的网站数量排序。 有用的信息: 我已经设置好了,所以
@website.likes
会从ѭ3return返回喜欢的人。 (
@website.likes.count
是网站获得的点赞数)   我想获取所有网站的阵列,但按喜欢的网站数量排序。     

解决方法

        正如其他人所张贴的,您可以对
likes
进行联接,然后按计数进行排序。根据索引等的不同,性能可能会有些差。根据运行的是Rails 2还是3,语法会稍有不同。 一种替代方法是在
websites
上保留非规范化的
likes_count
列,该列在保存
Like
模型对象时更新。 然后,您只需要查询
Website
并指定顺序
likes_count
降序即可(并且易于索引)。 为此,请在
websites
上创建
likes_count
整数列,并在
Likes
模型中的
belongs_to
声明中指定
:counter_cache
选项。例如:
class Likes
  belongs_to :website,:counter_cache => true
end
查看http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html了解更多信息     ,        此查询应为您提供所需的信息:
all(:select => \'websites.*,count(*) as count\',:joins => :likes,:group => :websites,:order => \'count DESC\')
    ,        类似于以下内容:
SELECT Websites.*,COUNT(Like.ID) AS Liked
FROM websites
    LEFT OUTER JOIN Like ON websites.ID = Like.website_id
GROUP BY Like.website_id ORDER BY Liked DESC