在 Rails 7 中:
我有一个有很多关联的对象。
关联有一个 :start_time 日期时间属性。
我想返回对象,按一定时间段内关联数量的顺序排列。
我已经尝试过:
但我不知道如何按频率对它们进行排名。
我也认为这是一种更简单的方法。
我确信这会因为缺乏细节/代码而被否决,但问题非常笼统,用例也很常见。
如有任何建议,我们将不胜感激。
以防其他人在看。
本质上我做了类似以下的事情:
在协会模型中:
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