如何在ruby on rails中使用另一个模型的数据来修改一个模型中的数据顺序



我在一个页面上显示了一个对话列表。这些对话中的每一个都充满了两个用户之间的消息。

一个会话有一条消息(主消息,充当该会话中其他消息的父消息)(_O)。对话列表当前排序如下:

default_scope :order => 'conversations.updated_at DESC'

我更喜欢使用最新发布的消息created_at或updated_at时间/日期来排序列表。为了获得最近发布的消息,我可以做这个

c = Conversation.find(4)
c.message.children.last

然后从那里我可以访问我想要的列。以下是我目前拥有的。有没有办法对此进行调整,以便它访问我的Messages表,从刚刚发布的消息中获取created_at和updated_at数据,并使用这些数据来排序上面提到的Conversation列表?

class Conversation < ActiveRecord::Base
   belongs_to :message
   default_scope :order => 'conversations.updated_at DESC'

class Message < ActiveRecord::Base
  acts_as_tree
  has_one :conversation

亲切问候

为了执行您想要的操作,您需要加入消息表,按会话id分组,并按updated_at的聚合函数排序。翻译成Rails,类似于:

default_scope { select("conversations.*, max(messages.updated_at) as last_update").join(:messages).group("conversations.id").order("last_update desc") }

我假设的是Rails 3,尽管default_scope的第一个定义似乎表示Rails 2。如果是这样,您将不得不相应地修改我的代码。

相关内容

  • 没有找到相关文章

最新更新