やりたいこと
Railsでお気に入り機能を実装したのですが、最新のクリップ順で記事を並び替えたいと思っています。
likesテーブルのlikeオフジェクトが生成されるとそれに紐づく記事が一番上にくるような形です。
DB構成
記事はいくつかのlikeを持っているような一般的ないいね機能です。
class Note < ActiveRecord::Base has_many :likes, dependent: :delete_all end
class Like < ActiveRecord::Base belongs_to :note, counter_cache: :likes_count belongs_to :user end
##やってみたこと
テーブル結合を利用して、以下のようにしてみましたが、単純にlikeとそれに紐づく記事を取り出しているため記事が重複してしまいました。
@notes = Note.includes([:user, :taggings, :types]).published.joins("left join likes on likes.note_id=notes.id").group('likes.id').order('likes.id DESC').page(params[:page]).per(20)
記事を重複させないように以下のように変更してみました。
groupを記事のid単位でグループ化するようにしています。
@notes = Note.includes([:user, :taggings, :types]).published.joins("left join likes on likes.note_id=notes.id").group('notes.id').order('likes.id DESC').page(params[:page]).per(20)
すると、すでにいいねを持っている記事についてはlikesテーブルのすでにある古いいいねのnote_idでgroup化しているためか一番上に出てきません。
いいねが0の記事についてはしっかり並び替えられていました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。