[英]ActiveRecord query based on multiple objects via has_many relationship
[英]Distinct query in has_many relationship with ActiveRecord
在找出处理此类查询的最有效方法时遇到了麻烦。
我有 3 个模型:
User
, Location
和Query
# User
has_many :queries
# Query
belongs_to: :user
belongs_to :location
我将user.queries
用于统计信息,因为它包含额外的元数据,如果它们碰巧执行相同的查询,则location_id
列上有很多重复项,但每个都有不同的元数据,因此它被记录为单独的记录。
我想构建一个所谓的history
,它从User.queries
中选择最近的不同location_id
并按id
或created_at
的顺序返回它们,同时仍将其保留为 ActiveRecord 集合,而不是将其转换为数组以便它可以迭代进行渲染。
user.queries.select(:location_id).distinct
很接近,但没有排序。
以下原始 SQL 似乎正在工作,但有没有办法用 ActiveRecord 编写它
queries.find_by_sql("
SELECT location_id, created_at
FROM (SELECT DISTINCT ON (queries.location_id) *
FROM queries
ORDER BY queries.location_id, queries.created_at DESC) queries
ORDER BY queries.created_at DESC
LIMIT 20
")
uniq
会尽可能接近
user.queries.order('queries.created_at DESC').pluck(:location_id).uniq
user.queries.select("location_id, queries.created_at").map(&:location_id).uniq
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.