投稿リソース(Diary)にはいいね(LIKE)リソースをたくさん持っている状態で、
Diary.rb
にクラスメソッドを作り、外部テーブルであるLike.rb
を所持する件数によって、Diaryリソースを並び替えるメソッドを組んでいますがSQLの知識が乏しいためうまくいきません。
どのように構成すればいいのかご教授いただけたら嬉しいです。
なお実装しようとしているのは並び替え機能で投稿順・投稿の古い順・いいねの多い順・いいねの少ない順を
term
にcontroller
の値を埋め込んでcase文でDiary
リソースを指定した順番で取得しようとしています。
4つあるうちのwhen 'likes'
とwhen 'dislikes'
は自分色々組み立てましたがうまくいきません。
よろしくお願いいたします。
ruby
1def self.sort(term) 2 case term 3 when 'new' 4 return all.order(created_at: :DESC) 5 when 'old' 6 return all.order(created_at: :ASC) 7 when 'likes' 8 return joins("LEFT OUTER JOIN likes ON likes.diary_id = diaries.id GROUP BY diaries.id ORDER BY count(likes.id) desc") 9 when 'dislikes' 10 return joins("LEFT OUTER JOIN likes ON likes.diary_id = diaries.id GROUP BY diaries.id ORDER BY count(diaries.id) asc") 11 end 12 end
教えていただいて実装しました
ありがとうございます。一部エラー内容が現れたみたいです
ActiveRecord::StatementInvalid - Mysql2::Error: Expression #10 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'diary_app_development.likes.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by: SELECT , COUNT() AS likes_count FROM
diaries
LEFT OUTER JOINlikes
ONlikes
.diary_id
=diaries
.id
GROUP BY diaries.id ORDER BYlikes_count
ASC LIMIT 5 OFFSET 0:
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/11/25 08:32
2021/11/25 08:43
2021/11/25 09:02
2021/11/25 09:37
2021/11/25 12:41
2021/11/25 21:34
2021/11/26 00:36
2021/11/26 20:19
2021/11/26 20:29 編集
2021/11/26 21:56
2021/11/27 03:10