在我的rails应用程序中,我的相关模型很少,例如:
活动
has_many :comments
has_many :attendents
has_many :requests
我需要的是通过' created_at'但不仅是主要模型(事件)而且还有相关模型,因此我将在最近活动的列表事件上显示,即:评论,参与者,请求
因此,如果活动日期比任何评论,请求或约会日期更新,则此活动将在最前面。 但是如果有一个更新评论的事件,那么这个评论就会出现在上面等等。
我应该如何实施这样的排序?
修改 db是mysql
谢谢
答案 0 :(得分:2)
我会为last_activity的事件添加一个列,并通过触摸相关模型来维护它。
另一种方法是通过对其他表使用连接或子查询来进行排序,这将要求数据库查询的效率远低于仅通过last_activity降序排序。
答案 1 :(得分:1)
Event
.select("events.*")
.joins("LEFT OUTER JOIN comments ON comments.event_id = events.id")
.joins("LEFT OUTER JOIN attendents ON attendents.event_id = events.id" )
.joins("LEFT OUTER JOIN requests ON requests.event_id = events.id")
.group("events.id")
.order("GREATEST(events.created_at,
MAX(comments.created_at),
MAX(attendents.created_at),
MAX(requests.created_at)) DESC")
答案 2 :(得分:0)
如果我理解你的问题,就像这样
首先将此添加到您的模型中:
default_scope order('created_at DESC')
然后我会做一些分组:
@comments = Comment.all
@comments_group = @comments.group_by { |c| c.event}
在您看来,您将能够遍历每个区块:
@comments_group.each do |event, comment|
- event.name
comment.each do|c|
- c.body
我没有对此进行测试,但它应该给你一个想法。