ruby-on-rails - 获取所有事件记录对象过滤为唯一的一个属性

标签 ruby-on-rails activerecord

是否可以查询模型对象并按一列或多列过滤结果以获得唯一性?

我应该用第一个独特的记录来证明这一点,而忽略其余的记录就可以了。

我通常的方法是查询对象并提取 uniq id 或其他任何内容并运行另一个查询。

假设我有一个这样的集合:

Test id: 24997, test_id: 7, group_id: 5408,

Test id: 25001, test_id: 7, group_id: 5412,

Test id: 25002, test_id: 8, group_id: 5413,

Test id: 25004, test_id: 8, group_id: 5415,

Test id: 25007, test_id: 9, group_id: 5417,

Test id: 25008, test_id: 9, group_id: 5299



我想要这样的结果。由 test_id 列唯一:

Test id: 24997, test_id: 7, group_id: 5408,

Test id: 25002, test_id: 8, group_id: 5413,

Test id: 25007, test_id: 9, group_id: 5417



我想是为了完整性。假设这是一个具有多列的直通表。如何获得两列或更多列的唯一记录?

最佳答案

您可以使用 minimum在身份证上:

Test.group(:test_id).minimum(:id)

这些将返回一个带有组键和 id 值的散列,您可以将其传递给作用域上的 where 条件:
Test.where(id: (Test.group(:test_id).minimum(:id).values))

关于ruby-on-rails - 获取所有事件记录对象过滤为唯一的一个属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34881017/

相关文章:

ruby-on-rails - 加速 ruby​​ select id 查询

ruby-on-rails - 在范围内使用 OR 进行查询

ruby-on-rails - Has_one 关系并在 Rails 3 中创建新记录

ruby-on-rails - Rails form_for 和 collection_select

ruby-on-rails - RVM 在 Debian 上卡在 'Installing required packages'

ruby-on-rails - 模拟时遇到问题 `Resolv::DNS.open`

mysql - Rails 加入最大条件

mysql - 使用 ActiveRecord 将数据从 MS Access DB 导入 MySQL DB

ruby-on-rails - Postgresql 和 ActiveRecord 其中 : Regex matching

sql - 复杂 ActiveRecord 案例中大小、长度和计数之间的差异