当前位置: 首页 > 面试题库 >

Rails 3 ActiveRecord:按关联计数

寇宏义
2023-03-14
问题内容

我有一个名为的模型Song。我也有一个名为的模型Listen。A Listen belongs_to :song和一首歌:has_many listens(可以收听很多次)。

在我的模型中,我想定义一个方法self.top,该方法应返回收听次数最多的前5首歌曲。如何使用has_many关系实现这一目标?

我正在使用Rails 3.1。

谢谢!


问题答案:

使用命名范围:

class Song
  has_many :listens
  scope :top5,
    select("songs.id, OTHER_ATTRS_YOU_NEED, count(listens.id) AS listens_count").
    joins(:listens).
    group("songs.id").
    order("listens_count DESC").
    limit(5)

Song.top5 # top 5 most listened songs


 类似资料:
  • 问题内容: 我有一个模型可以使用“使行为成为现实”宝石(Github页面)进行投票。投票系统工作正常,但我尝试显示按每个页面有多少排序的页面。 目前,我的控制器根据标签提取资源,但未排序: 如果我使用单个资源并调用“ @ resource.votes.size”,它将返回其拥有的票数。但是,票数是另一张桌子,因此我认为需要进行某种形式的合并,但我不确定如何进行。我需要的是一个可以这样显示的漂亮的有

  • 关联统计 有些时候,并不需要获取关联数据,而只是希望获取关联数据的统计,这个时候可以使用withCount方法进行指定关联的统计。 $list = User::withCount('cards')->select([1,2,3]); foreach($list as $user){ // 获取用户关联的card关联统计 echo $user->cards_count; } 关联统计

  • 问题内容: 给定模型所在的相同场景 我想按收听次数对歌曲进行分组。我的目标是查看歌曲与听音的分布情况。就像是… 这样就可以返回听过4次的歌曲数量。 上面链接问题的公认答案非常接近我,但是我无法按“ songs.listens_count”分组 问题答案: 您正在寻找的内容与标准ActiveRecord查询的映射并不理想。 您可以调用直接SQL来最有效地获取所需内容: 另外,您可以使用ActiveR

  • 我正在从flickrs API获取一些JSON。我的问题是exif数据的顺序因相机而异。所以我不能硬编码一个数组号来获得,例如,下面的相机型号。PHP是否有任何内置方法来搜索关联数组值并返回匹配数组?在下面的示例中,我想搜索

  • 问题内容: 我有两个表,和。中的每个条目都有一个指向的外键。使用Sequelize,如何获取与中的每个条目相关联的所有条目以及其中的条目总数? 原始SQL: 楷模: 问题答案: 使用与和为: 或者,您可能还需要添加一个:

  • 我有一个简单的场景TableA、TableB和JoinTable,它连接了TableA和TableB。我想在TableA中为TableA中的每一行存储JoinTable中具有TableAId的记录的计数。我可以正确地选择它如下: 但是,我很难编写更新查询。我想用这个结果更新TableA.JoinCount。