ActiveRecord查询,按关联顺序,has_many的最后一个
我试图通过最近创建的关联的recored(通信)的created_at
列列出所有用户 。
到目前为止我所拥有的:
User.includes(:communications).order( 'communications.created_at IS NULL, communications.created_at asc' )
事实上, desc
工作正如我所料。 问题是当订单被撤销时我尝试订购asc
。 它似乎是因为用户可以有很多通信 ,查询按照创建的第一个通信而不是最新通信的顺序返回用户列表。
如何修改查询以定位asc
和desc
顺序中最近创建的关联记录?
谢谢你的时间。
问题是您正在尝试按子的属性对父级进行排序,因此只有当他们的订单具有相同的方向时,您的解决方案才会起作用。
使用它的方法是使用聚合函数作为子元素的属性,如下所示:
# 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')
- Rails 3通过父关联排序
- accept_nested_attributes_for:allow_destroy,:_ destroy无效
- 如何使“喜欢条款”不区分大小写
- Ruby on Rails – 创建新条目时,使用回调将两个对象在单独的表中相乘
- Rails模型中的条件validation
- 如何在Rails模型的回调中访问params?
- 通过以下方式进行多对多:从Associations :: CollectionProxy到AssociationRelation
- Rails 4.2.0中的简单整数赋值的RangeError应该通过validation捕获
- 查找符合所有类别的产品(Rails 3.1)