我正在使用 Rails 5 和 Postgresql。 以前版本的 Rails 已经回答了这个问题(包括 Rails 4,使用 distinct、uniq 等,但在 Rails 5 中没有一个对我有用,因为它们已经过时了)。
我有一个 Upload
模型,它有一个 uuid
属性。
我想获取具有不同 uuid
的记录,而不使用来自枚举的 uniq
。
这是我的原始查询:
Upload.includes(:user, product: [:catalog]).where(file_type: "product_attachment", product_id: nil, user_id: current_user.id))
我在添加 distinct
或 select
时出错(看起来这些方法通常只用于从模型返回一个属性,而我在这里需要整个对象).
知道如何在 Rails 5 中实现这一点吗?
使用示例数据进行编辑:
上传:
id: 1
uuid: 8e8fece82b6b1368ab6f21852c625e85718d210e
id: 2
uuid: 842e7650b4bba97f097d9cf57f47d8160086b7cd
id: 3
uuid: 8e8fece82b6b1368ab6f21852c625e85718d210e
上传 1 和 3 具有相同的 uuid,因此预期结果将仅包含 id 为 1 和 2 的上传(它们具有不同的 uuid)。
最佳答案
假设您希望Upload
具有最小id
的每个重复uuid
组,
Upload.includes(:user, product: [:catalog]).where(file_type: "product_attachment", product_id: nil, user_id: current_user.id)).
where(id: Upload.group(:uuid).select("min(id)"))
为了分解它,这个 where
子句过滤所有具有重复 uuid
的 Upload
除了具有 min
的那个> id
where(id: Upload.group(:uuid).select("min(id)"))
关于ruby-on-rails - Rails 5 - 查询具有 uniq 属性的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635390/