前提・実現したいこと
記事を投稿したり削除できるwebサービスを制作しています。
トップページにはいいねの数によって記事を並べるランキング機能を実装しており、
管理者はこれらの記事を削除できる権限を持っています。
問題なく機能していたと思ったのですが削除機能を改めて確かめてみたところ、
下記のエラーが発生しました。
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in HomesController#index Couldn't find Article with 'id'=1
該当のソースコード
controller
1class HomesController < ApplicationController 2 # before_action :set_article, only: [:index] 3 4 def index 5 @manga = Article.where(category: "マンガ") 6 @illust = Article.where(category: "イラスト") 7 @anime = Article.where(category: "アニメ") 8 9 @all_ranks = Article.find(Like.group(:article_id).order('count(article_id) desc').limit(4).pluck(:article_id)) 10 @new_article = Article.order(created_at: :desc).limit(5) 11 end 12 13 # def set_article 14 # @article = Article.find(params[:article_id]) 15 # end 16end
<div class="lanking-article"> <% @all_ranks.each.with_index(1) do |article, i| %> <div class="ranking-card"> <td class="text-center"> <% case i when 1 %> <i class="fas fa-crown" style='color: gold;'></i> <% when 2 %> <i class="fas fa-crown" style='color: silver;'></i> <% when 3 %> <i class="fas fa-crown" style='color: orange;'></i> <% else %> <%= i %>位 <% end %> </td> <p><%= link_to image_tag(article.image), article_path(article) %></p> <p><%= link_to truncate(article.title, length:30), article_path(article) %></P> </div> <% end %> </div>
試したこと
現状は削除した記事のID(今回の場合はid=1)を一覧画面で表示しようとしたときも参照
してしまっているため"Couldn't find Article" = (削除したので)記事が見つからない
となっていると考えました。
そこで上記のコントローラでコメントアウトされているset_articleメソッドを定義し、
まず全体の記事の確認してから記事を表示しようと考えたのですがうまくいかず悩んでします。
考え方の方向性としてはあっていますでしょうか?
もし最適な考え方や解決策などがあればぜひ助言を頂けると嬉しいです。
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/12/14 03:07
2021/12/14 03:18 編集
2021/12/14 03:25