在 Ruby/Rails 中如何根据关联数量对对象进行排名?

问题描述 投票:0回答:1

在 Rails 7 中:

我有一个有很多关联的对象。

关联有一个 :start_time 日期时间属性。

我想返回对象,按一定时间段内关联数量的顺序排列。

我已经尝试过:

  1. 创建从 date1 到 date2 的关联数组
  2. 使用 group_by 和 every with object 创建 Object.ids 和频率的哈希值

但我不知道如何按频率对它们进行排名。

我也认为这是一种更简单的方法。

我确信这会因为缺乏细节/代码而被否决,但问题非常笼统,用例也很常见。

如有任何建议,我们将不胜感激。

arrays ruby-on-rails postgresql sorting hash
1个回答
0
投票

以防其他人在看。

本质上我做了类似以下的事情:

在协会模型中:

  def self.grouped
    exclusionId = Object.find_by(name: 'Excluded Object').id
    Association.joins(:object).where.not(object_id: exclusionId)                                                                                   .group_by{|assoc| assoc.object_id}
  end

  def self.ranked_objects
    association_by_object = Association.grouped.each_with_object({}) { |(k,v),h| h[k] = v.size }
    (association_by_object.sort_by{|key, value| value}).reverse
  end

然后在适用的控制器操作中:

  def objects_ranked
    render json: Association.ranked_objects.to_json
  end
© www.soinside.com 2019 - 2024. All rights reserved.