ruby-on-rails - Rails 5 - 查询具有 uniq 属性的记录

标签 ruby-on-rails postgresql activerecord

我正在使用 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))

我在添加 distinctselect 时出错(看起来这些方法通常只用于从模型返回一个属性,而我在这里需要整个对象).

知道如何在 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 子句过滤所有具有重复 uuidUpload 除了具有 min 的那个> id

where(id: Upload.group(:uuid).select("min(id)"))

关于ruby-on-rails - Rails 5 - 查询具有 uniq 属性的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45635390/

相关文章:

ruby-on-rails - 为什么我应该只在测试环境而不是开发或生产环境中在我的 Rails 应用程序上运行 rspec 规范?

ruby-on-rails - Prawn :锚定文本中间到给定点

SQL COUNT 个,共 COUNT 个

bash - PostgreSQL 交互终端 : passing parameters with single quotes or double quotes - any difference?

ruby-on-rails - 缓存多级外部 id 是一个好习惯吗

javascript - 如何在textarea中追加表格

postgresql - 如何使用 PostgreSQL 数据库作为 XMLA 数据源?

mysql - 为什么要在迁移中触发 add_index 中的唯一选项

ruby-on-rails - postgresql 上的 Activerecord 迁移错误

ruby-on-rails - Rails : If Foo has_many :bars, 做所有 :bars need to belong_to a Foo?