minnierapi
@minnierapi (ニ ミ)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

ActiveRecord::RecordNotFound in MemosController#show エラーについて

解決したいこと

rails初心者です。

params[:id]がnilになっていて取得が出来ないエラーが生じています。

どなたか教えて頂けると有り難いです。
 

発生している問題・エラー

 ActiveRecord::RecordNotFound in MemosController#show
Couldn't find Memo with 'id'=3
 def show
  @memo = Memo.find(params[:id]) #エラー文
  end

該当するソースコード

memos/controller

 class MemosController < ApplicationController
  before_action :authenticate_user!, except: [:index]


  def new
    @memo = Memo.new
  end

  def create
    @memo = Memo.new(memo_params)
    @memo.user_id = current_user.id
    @memo.save
     redirect_to memo_path(current_user)
    end

  def index
    @memos = Memo.all
  end

  def show
     @memo = Memo.find(params[:id])
  end

  def edit
     @memo = Memo.find(params[:id])
  end

  def update
     @memo = Memo.find(params[:id])
     if @memo.update(memo_params)
       redirect_to memo_path(@memo), notice: "レシピを更新しました。"
     end
   end

   def destroy
    memo = Memo.find(params[:id])
    memo.destroy
    redirect_to user_path(memo.user), notice: "レシピを削除しました。"
  end


  private
    def memo_params
      params.require(:memo).permit(:title, :body, :image)
    end
  end


memos/show.html.erb
<% if @memo.image? %>
<%= image_tag @memo.image.to_s %>
<% else %>
<%= image_tag "no-image.png" %>
<% end %>   

          <%= @memo.title %></p>

              <%= simple_format @memo.body %>

          <% if @memo.user.id == current_user.id %>
            <%= link_to "編集画面へ", edit_memo_path(@memo), class: "button is-success" %>


        By <%= @memo.user.username %>

        <p class="control">
          <%= @memo.user.profile %>

      <%= link_to user_path(@memo.user), class: "panel-block" do %>
        <span class="panel-icon">
          <i class="fas fa-user" aria-hidden="true"></i>
        </span>
        <%= @memo.user.username %> さんのページへ
0

2Answer

Comments

  1. @minnierapi

    Questioner

    コメント遅くなりました。このような結果が返ってきました。
    おそらくidは読み取れて無いみたいです。

    (0.7ms) SELECT sqlite_version(*)
    Memo Load (0.3ms) SELECT "memos".* FROM "memos" WHERE "memos"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]]
    /Users/ruby.memo/vendor/bundle/ruby/3.0.0/gems/activerecord-6.1.4.1/lib/active_record/core.rb:338:in `find': Couldn't find Memo with 'id'=3 (ActiveRecord::RecordNotFound)
  2. @minnierapi

    Questioner

    追記です。

    idによって取得出来ているデータと出来ていないデータが存在している見たいです。
    id(1)やid(6)は取得出来ていても、その他のidは取得が出来ていないです。
  3. なので、単純に存在しないデータにアクセスしようとしているだけでは?(id=3)

なので、単純に存在しないデータにアクセスしようとしているだけでは?(id=3)

同意です。それを承知のうえで、エラーにしたくない場合は、

Memo.find_by(id: params[:id])

とかにすればよいかと。

0Like

Your answer might help someone💌