当前位置:  开发笔记 > 后端 > 正文

ActiveRecord查询,按关联顺序,has_many的最后一个

如何解决《ActiveRecord查询,按关联顺序,has_many的最后一个》经验,为你挑选了1个好方法。

我试图按最近创建的相关评估(通信)列列出所有用户created_at.

到目前为止我所拥有的:

User.includes(:communications).order(
  'communications.created_at IS NULL, communications.created_at asc'
)

实际上,desc按照我的预期工作.问题是当订单被撤销并且我尝试下单时asc.这似乎是因为用户可以有很多通信,查询按照创建的第一个通信而不是最新通信的顺序返回用户列表.

如何修改查询以定位最近创建的关联记录ascdesc订单?

谢谢你的时间.



1> Hoang Phan..:

问题是您正在尝试按子的属性对父级进行排序,因此只有当他们的订单具有相同的方向时,您的解决方案才会起作用.

使用它的方法是使用聚合函数作为子元素的属性,如下所示:

# ascending
User
  .joins('LEFT JOIN communications ON communications.user_id = users.id')
  .group('users.id')
  .order('MAX(communications.created_at) ASC')

# descending
User
  .joins('LEFT JOIN communications ON communications.user_id = users.id')
  .group('users.id')
  .order('MAX(communications.created_at) DESC')

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有