是否可以通过一个或多个列查询模型对象并筛选结果以确保唯一性?
我应该限定这一点,采取第一个独特的记录,而忽略其余的是好的。
我通常的方法是查询对象和拔出uniq ids或其他什么,然后运行另一个查询。
假设我有一个这样的场景:
测试id: 24997,test_id: 7,group_id: 5408 测试id: 25001,test_id: 7,group_id: 5412, 测试编号: 25002,test_id: 8,group_id: 5413, 测试编号: 25004,test_id: 8,group_id: 5415, 测试编号: 25007,test_id: 9,group_id: 5417, 测试id: 25008,test_id: 9,group_id: 5299
我希望有这样的结果。test_id列的惟一性:
测试id: 24997,test_id: 7,group_id: 5408 测试编号: 25002,test_id: 8,group_id: 5413, 测试编号: 25007,test_id: 9,group_id: 5417
我想是为了完整。假设这是一个具有多列的直通表。如何通过两列或更多列获得唯一的记录?
发布于 2016-01-19 08:45:05
您可以在id上使用最小值:
Test.group(:test_id).minimum(:id)
它们将返回带有组键和id值的散列,您可以将其传递给作用域上的where条件:
Test.where(id: (Test.group(:test_id).minimum(:id).values))
发布于 2016-01-19 08:25:23
是。可以使用不同的根据列上的唯一性筛选结果。
假设您有一个带有Post
列的title
模型,并且您必须按标题获得唯一的记录,那么就可以这样做了。
Post.select('DISTINCT title')
编辑:上面的查询将只返回title列,但是如果您想要所有的列,则必须循环并过滤。基本上,如果您对一列执行唯一性,并且存在重复项,则无法决定保留哪一列和丢弃哪一列。
https://stackoverflow.com/questions/34881017
复制