0

ここでたくさん検索しましたが、同様のトピックは見つかりませんでした。will_paginateを使用して結果を参照するため、Arelでクエリを作成する必要があります。そのため、生のSQLを使用した実装ではかなり快適になりません。

これが私がアレルで綴る必要があるものです:

SELECT m.*
 FROM   messages m
 JOIN  (SELECT tmp.original_id as original_id,
               max(tmp.id) as id
        FROM   messages tmp
        WHERE  tmp.recipient_id = ?
        GROUP BY tmp.original_id) g ON (m.id = g.id)
 ORDER BY m.updated_at DESC;

簡単に説明すると、サブクエリはユーザーのすべてのメッセージを取得します。メッセージに新しい返信がある場合(返信では、参照メッセージIDをoriginal_idとして保存します)、古いメッセージは無視されます。これらすべてのメッセージの結果として、Railsに対応するオブジェクトを配信してもらいたいと思います。

私はSQLにかなり熟練していますが、残念ながらArelには精通していません。どんな助けでも親切にいただければ幸いです。

4

1 に答える 1

0

このようなものはどうですか?

class Message < ActiveRecord::Base
  scope :newer_messages lambda { |num_days=10| where("updated_at > #{Time.now} - #{num_days}.days") }
end

次に、次のような特定のユーザーの新しいメッセージを見つけることができます。

Message.find_by_user_id(user_id).newer_messages  
于 2012-04-21T10:47:45.293 に答える