2016-06-27 101 views
0

我有一组用户。他们有很多要求。相关模型中属性的高级排序

# user.rb 
has_many :requests 

现在我想通过最后要求created_at时间戳对它们进行排序。

所以,如果用户有最近的请求(就是created_at最接近当前时间)他们是#1等

任何想法?

我已经试过

User.includes(:requests).order('requests.created_at') 

然而,通过第一个请求created_at时间戳这显然不是我想要的排序。我只想检索他们的最后一个请求。然后根据他们在日期创建的用户上次请求进行排序,然后按用户排序。

更新: 另外,如果用户没有任何请求,他们应该在底部。现在,如果他们没有任何东西,他们会置于顶端。

回答

0
User.joins(:requests).includes(:requests).order('requests.created_at desc') 

你需要joins它,所以它会排序的连接表。

includes只会为您预加载您的requests,它不会帮助您对requests进行排序。

UPDATE

借用SQL how to make null values

要纳入这种情况下,它可能看起来像这样

User.joins(:requests).includes(:requests).order('CASE WHEN requests.created_at IS NULL THEN 1 ELSE 0 END asc, requests.created_at desc') 

一阶会把空者在底部,然后按日期排序d esc

+0

有关我如何对其进行排序以便也没有任何请求的用户最后的任何想法?目前他们是第一位的。 –

+0

@ SebastianJenningsAlmnes更新,给它一个镜头 – lusketeer

1

您必须按降序排列。尝试

User.includes(:requests).order('requests.created_at desc').first()