首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在ActiveRecord中返回匹配的结果,然后返回余数?

如何在ActiveRecord中返回匹配的结果,然后返回余数?
EN

Stack Overflow用户
提问于 2014-10-14 20:36:11
回答 3查看 56关注 0票数 2

假设我们有这样的数据

代码语言:javascript
复制
< id: 1, name: "Bill", type: "Lemur" >
< id: 2, name: "Bob", type: "Cow" >
< id: 3, name: "Nancy", type: "Lemur" >
< id: 4, name: "Jack", type: "Seagull" >
< id: 5, name: "Jill", type: "Seagull" >
< id: 6, name: "Jake", type: "Cow" >
< id: 7, name: "Jess", type: "Lemur" >
< id: 8, name: "Nick", type: "Lemur" >
< id: 9, name: "Jacky", type: "Cow" >
< id: 10, name: "Jerry", type: "Cow" >
< id: 11, name: "Samuel", type: "Seagull" >
< id: 12, name: "Tessa", type: "Lemur" >

我想返回所有的结果,其中类型是Lemur第一,然后返回其余的结果,以任何顺序。我想我可以使用ActiveRecord的分组方法,但是我认为我没有正确地理解它,它正在做其他的事情。在看到另一个堆栈溢出回答后,我尝试过执行Animal.order('Field(type, "Lemur")'),但这也没有起作用。我需要一个亲戚回来,因为我要把这个传给卡米纳里分页。有人知道怎么做吗?

为了使事情变得更复杂,我们实际上想在hstore专栏上这样做,但我想先找出一般的答案。

这是Rails 3.2上的Postgres 9.3。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-14 20:53:14

因为Postgres没有像MySQL那样的“按字段订购”(some_column,'Zebra',‘Hipo’)--你可以尝试使用“按砰排序!”,就像这样:

代码语言:javascript
复制
Animal.order("type!='Lemur', type!='Cow', type!='Seagull'")

如这一职位所建议的那样:

在Postgresql中模拟MySQL按字段()的顺序

票数 2
EN

Stack Overflow用户

发布于 2014-10-14 20:50:46

有一种SQL方法可以做到这一点:

代码语言:javascript
复制
Animal.order("CASE animals.type WHEN 'Seagull' THEN 'a' ELSE 'z' END ASC, animals.name ASC")

此查询将所有类型为“海鸥”的动物放在第一位,然后根据动物的名称订购其余的动物。

多亏了基本的开关箱 ;)

票数 2
EN

Stack Overflow用户

发布于 2014-10-14 20:47:08

我怀疑你能通过一条一条一组地做这件事。我所能想到的就是这个可能有点不雅:

代码语言:javascript
复制
Lemur.all.concat Animal.all.reject{ | a | a.type == 'Lemur' }

编辑:只有当你对数组很满意的时候,这种方式才能奏效。下面是如何使用ActiveRecord::Relation (Where.not(条件)必需的Rails 4)来实现它。

代码语言:javascript
复制
Animal.where(type: 'Lemur') + Animal.where.not(type: 'Lemur')

编辑:哎哟,看来后者也会返回一个数组。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26369827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档