Railsアプリ用のFacebookスタイルのメッセージングシステムを作成していますが、受信トレイのメッセージを選択するのに問題があります(will_paginateを使用)。
メッセージはスレッドで編成され、受信ボックスにはスレッドの最新のメッセージがそのスレッドへのリンクとともに表示されます。スレッドは、それ自体とのparent_id1-n関係を介して編成されます。
これまでのところ、私は次のようなものを使用しています:
class Message < ActiveRecord::Base
belongs_to :sender, :class_name => 'User', :foreign_key => "sender_id"
belongs_to :recipient, :class_name => 'User', :foreign_key => "recipient_id"
has_many :children, :class_name => "Message", :foreign_key => "parent_id"
belongs_to :thread, :class_name => "Message", :foreign_key => "parent_id"
end
class MessagesController < ApplicationController
def inbox
@messages = current_user.received_messages.paginate :page => params[:page], :per_page => 10, :order => "created_at DESC"
end
end
これですべてのメッセージが表示されますが、1つのスレッドについては、スレッド自体と最新のメッセージ(および最新のメッセージだけでなく)が表示されます。もちろん、スレッド自体(いわば親)の場合、parent_id = nilであるため、GROUPBY句を使用することもできません。
誰かがこれをエレガントな方法で解決する方法についてアイデアを得ましたか?親自体にparent_idを追加してから、parent_idでグループ化することをすでに考えましたが、それが機能するかどうかはわかりません。
ありがとう