前提・実現したいこと
SNS系のアプリを作成しております。
いいね数の多い順にランキング機能を実装しています。
その際に月間ランキングで、今月投稿された投稿の中でいいね数が多い順にランキングにしたいと考えております。(今であれば2月に投稿された内容のみ)
発生している問題・エラーメッセージ
先月投稿された投稿にいいねをすると、今月投稿されたものと認識されてしまいランキングページに表示されてしまいます。 例) ・現在が1月と仮定 1月に新規投稿、1月中いいね数0、1月のランキングに表示されない→正常(確認済み) 1月に新規投稿、1月中いいね数10、1月のランキングに表示される→正常(確認済み) ・現在が2月と仮定 1月に新規投稿、1月中いいね数10、2月中いいね数0、2月のランキングに表示されない→正常(確認済み) 1月に新規投稿、1月中いいね数10、2月中に1回以上いいね、2月のランキングに表示される→正常でない(今回の問題点) ※いいねを取り消すとランキングからも消えます。 2月の場合は、2月に新規投稿された投稿のいいね数でランキング表示を行いたいです。 posts_controller.rbのrankingアクション内の@posts_good_rankingで問題が起きております。
該当のソースコード
posts_controller.rb
1def ranking 2 @posts_pv_ranking = Post.where(created_at: Time.current.all_month).order(impressions_count: 'DESC').limit(4) 3 @posts_good_ranking = Post.find(Like.group(:post_id).where(created_at: Time.current.all_month).order('count(post_id) DESC').limit(4).pluck(:post_id)) 4 @date1 = Date.current.strftime('%m') 5end 6 7def pv_ranking 8 @posts_pv_ranking = Post.where(created_at: Time.current.all_month).order(impressions_count: 'DESC').page(params[:page]).per(8) 9 @date1 = Date.current.strftime('%m') 10end 11 12def good_ranking 13 @posts_good_ranking = Post.find(Like.group(:post_id).where(created_at: Time.current.all_month).order('count(post_id) DESC').pluck(:post_id)) 14 @posts_good_ranking = Kaminari.paginate_array(@posts_good_ranking).page(params[:page]).per(8) 15 @date1 = Date.current.strftime('%m') 16end
ranking.html.erb
1<div class="container"> 2 <h4>グッド!!が多い投稿(<%= @date1 %>月)</h4> 3 <div class="row"> 4 <%= render "good_ranking", posts_good_ranking: @posts_good_ranking %> 5 </div> 6 <div class=" row d-flex justify-content-end ranking-list"> 7 <%= link_to "一覧で見る", posts_good_ranking_path %> 8 </div> 9 <h4>閲覧数が多い投稿(<%= @date1 %>月)</h4> 10 <div class="row"> 11 <%= render "pv_ranking", posts_pv_ranking: @posts_pv_ranking %> 12 </div> 13 <div class=" row d-flex justify-content-end ranking-list"> 14 <%= link_to "一覧で見る", posts_pv_ranking_path %> 15 </div> 16</div>
_goodranking.html.erb
1<% posts_good_ranking.each do |post| %> 2 <div class="col-lg-3 d-flex flex-column postranking"> 3 <div class="ranking-user-name"> 4 <%= link_to user_path(post.user.id) do %> 5 <%= attachment_image_tag post.user, :profile_image, size: '50x50', fallback: "no_image.jpg" %> 6 <%= post.user.name %> 7 <% end %> 8 </div> 9 <div> 10 <%= post.title %> 11 </div> 12 <div class="mb-auto ranking-post"> 13 <% post.post_images.first(1).each do |image| %> 14 <%= link_to post_path(post.id) do %> 15 <%= attachment_image_tag image, :image, class: "ranking_image" %> 16 <% end %> 17 <% end %> 18 </div> 19 <div> 20 <i class="fas fa-thumbs-up"></i> 21 <%= post.likes.count %> 22 <i class="far fa-clock clock-icon"></i> 23 <%= time_ago_in_words(post.created_at) %>前 24 </div> 25 </div> 26<% end %>
試したこと
posts_controller.rb
1def ranking 2 @post = Post.where(created_at: Time.current.all_month) 3 @posts_good_ranking = @post.find(Like.group(:post_id).order('count(post_id) DESC').limit(4).pluck(:post_id))
まず上記のように最初に今月作成されたデータだけを取得しその上でいいね数を数えて並べるようにしましたが下記エラーが表示され解決方法がわからない状態です。
ActiveRecord::RecordNotFound in PostsController#ranking
Couldn't find all Posts with 'id': (1, 2, 3, 4) [WHERE "posts"."created_at" BETWEEN ? AND ?] (found 1 results, but was looking for 4).
どのようにしたら、先月投稿された投稿にいいねをしても、今月投稿されたものと認識されず、今月新規投稿された投稿だけでランキング機能を実装できますでしょうか?

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/02/12 09:22
2022/02/12 09:32
2022/02/12 10:51
2022/02/13 09:04
2022/02/13 09:30