ise*_*sea 4 activerecord ruby-on-rails
是否可以查询模型对象并按一列或多列过滤结果以获得唯一性?
我应该用第一个独特的记录来证明这一点,而忽略其余的记录就可以了。
我通常的方法是查询对象并提取 uniq id 或其他任何内容并运行另一个查询。
假设我有一个这样的集合:
测试 id:24997,test_id:7,group_id:5408,
测试 id:25001,test_id:7,group_id:5412,
测试id:25002,test_id:8,group_id:5413,
测试 id:25004,test_id:8,group_id:5415,
测试id: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,
测试id:25002,test_id:8,group_id:5413,
测试 id:25007,test_id:9,group_id:5417
我想是为了完整性。假设这是一个具有多列的直通表。如何获得两列或更多列的唯一记录?
小智 5
您可以在 id 上使用minimum:
Test.group(:test_id).minimum(:id)
Run Code Online (Sandbox Code Playgroud)
这些将返回一个带有组键和 id 值的散列,您可以将其传递给作用域上的 where 条件:
Test.where(id: (Test.group(:test_id).minimum(:id).values))
Run Code Online (Sandbox Code Playgroud)
是的。您可以使用unique来根据列的唯一性来过滤结果。
考虑您有一个Post带有列的模型title,并且您必须按标题获取唯一记录,那么您会这样做
Post.select('DISTINCT title')
Run Code Online (Sandbox Code Playgroud)
编辑:上面的查询只会返回标题列,但如果您想要所有列,则必须循环和过滤。基本上,如果您对一列执行唯一性并且存在重复项,则它无法决定保留哪一列以及丢弃哪一列。