0

モデル User と Comment の間に多対 1 の関係があります。

各ユーザーの最後のコメント (最後のコメントを含む) の 24 時間前に一連のユーザーによって作成されたすべてのコメントを、できればハッシュで収集したいと思います。

これは私が思いついたものですが、言及された期間からのみコメントを使用してハッシュを作成する方法がわかりません。

Comment.order('updated_at desc').where(user_id: array_of_users_ids).group_by(&:user).each do |user, comments|
  # rearrange the hash here?
end
4

1 に答える 1

1

これに対する SQL ソリューションは相関サブクエリですが、使用中の RDBMS によっては非標準の日付演算によってややこしくなります。

次のようなクエリを探しています。

select ...
from   comments
where  comments.user_id in (...) and
       comments.updated_at >= (
         select max(updated_at) - interval '1 day'
         from   comments c2
         where  c2.user_id = comments.user_id)

あなたはこれを達成できるはずです:

Comment.where(user_id: array_of_users_ids).
        where("comments.updated_at >= (
                 select max(updated_at) - interval '1 day'
                 from   comments c2
                 where  c2.user_id = comments.user_id)").
        order(... etc
于 2013-07-16T13:04:09.793 に答える