1

ページに会話のリストが表示されています。これらの会話のそれぞれは、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

敬具

4

1 に答える 1

1

やりたいことを行うには、メッセージテーブルに参加し、会話IDでグループ化し、updated_atの集約関数で並べ替える必要があります。Railsに翻訳すると、次のようになります。

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

私はRails3を想定していますが、default_scopeの最初の定義はRails 2を示しているようです。その場合は、それに応じてコードを変更する必要があります。

于 2013-02-05T20:39:45.690 に答える