【发布时间】:2013-02-05 19:13:22
【问题描述】:
我有一个页面上显示的对话列表。这些对话中的每一个都充满了 2 个用户之间的消息。
一个会话 has_one 消息(作为该会话其他消息的父消息的主消息)。对话列表目前的排序如下:
default_scope :order => 'conversations.updated_at DESC'
我希望使用最近发布的消息 created_at 或 updated_at 时间/日期对列表进行排序。要获取最近发布的消息,我可以这样做
c = Conversation.find(4)
c.message.children.last
然后我可以从那里访问我想要的列。以下是我目前拥有的。有没有办法对此进行调整,以便它访问我的 Messages 表并从刚刚发布的消息中获取 created_at 和 updated_at 数据,并使用这些数据对上述对话列表进行排序?
class Conversation < ActiveRecord::Base
belongs_to :message
default_scope :order => 'conversations.updated_at DESC'
class Message < ActiveRecord::Base
acts_as_tree
has_one :conversation
亲切的问候
【问题讨论】:
-
你能添加你的模型和关联定义吗?我认为我们缺少基于“c.message.children ...”和“message_threads.updated at ...”的东西我认为您需要的解决方案并不困难,我只是想确保您获得正确的信息。
-
嗨,对不起,message_threads 应该说对话。我已经更正了。
-
没问题。为了清楚起见——这种设置方式将对话与消息的关系显示为一对一。一个对话与一条消息相关联,而一条消息只有一个对话。这是正确的吗?
-
是的,这是正确的。每条消息都有组成对话的孩子。第一条消息是用于识别对话的消息。它有一个 parent_id,即会话表/模型中的 message_id。
-
好吧,当我说“我认为解决方案不会很困难”时我错了,因为这些关联实际上使得它与理论上可以运行的自引用消息关联一起变得相当困难- 层次深。我同意博尔德在他的答案和 cmets 中所述的方向——但这需要更新架构。很抱歉让你失望了。
标签: ruby-on-rails ruby ruby-on-rails-3 rubygems ruby-on-rails-3.2