前提・実現したいこと
アプリの中で記事(article)にコメントをできるようにしています。
コメントの表示のために、ActiveRecoedで2つのカラムの組み合わせが一意になるようにレコードを取得したいです。
また、新しい順(comments.idが大きい順)に取得したいと思っています。
現状
|id|comment|user_id|article_id|
|:--|:--:|--:|
|1|コメント1|1|1|
|2|コメント2|1|2|
|3|コメント3|2|2|
|4|コメント4|2|3|
|5|コメント5|1|2|
commentsテーブルがuserとarticleのidを持っています。
(user_id, article_id)の組み合わせが一意になるように、新しい順でカラムを取得したいです。
試したこと
Comment.select("DISTINCT ON (article_id, user_id) *") Comment Load (0.6ms) SELECT DISTINCT ON (article_id, user_id) * FROM "comments"
これで(user_id, article_id)の組み合わせは一意に取り出せています。
ですが、取得できるレコードが[コメント1,コメント2,コメント3,コメント4]になってしまいます。
試しに降順にしてみました
Comment.order(id: "DESC").select("DISTINCT ON (article_id, user_id) *") Comment Load (2.3ms) SELECT DISTINCT ON (article_id, user_id) * FROM "comments" ORDER BY "comments"."id" DESC Comment Load (1.0ms) SELECT DISTINCT ON (article_id, user_id) * FROM "comments" ORDER BY "comments"."id" DESC LIMIT $1 [["LIMIT", 4]] => #<Comment::ActiveRecord_Relation:0x3fec3bd53fb0>
するとActiveRecordが1つしか返ってこず、また、SQLが2回走ってしまいます。
[コメント5,コメント4,コメント3,コメント1]というように、「コメント2」ではなく「コメント5」を取得できるようにしたいです。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/08 12:27