Couldn't find User with 'id'=を解決する→間違えていましたので解決したのち修正します→追記しました

# はじめに
本記事では、
`ActiveRecord::RecordNotFound~`の
`Couldn't find User with 'id'=`というエラーを解決しましたので、
アウトプットします。

![画像とユーザーのidがリンクしてしまったエラー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1768158/2de74b8d-25c0-561b-0100-64cd3340124f.png)

# エラーが出ていたコード
編集（edit）→updateの実装をできるようにしておりましたところエラーが出てしまいました。
無事に編集できれば、マイページに遷移できるようにしようとしています。

先にコードを載せます。

```users_controller.rb
class UsersController < ApplicationController

  def show
    user = User.find(params[:id])
    @nickname = user.nickname
    @foods = user.foods
  end

end
```

```foods_controller.rb
class FoodsController < ApplicationController

  def index
    @foods = Food.order("created_at DESC")
  end

  def new
    @food = Food.new
  end

  def create
    @food = Food.new(food_params)

    if @food.save
      redirect_to root_path
    else
      render :new
    end

  end

  def search
    @foods = Food.search(params[:keyword])
  end

  def edit
    @food = Food.find(params[:id])
    return redirect_to user_path if current_user.id != @food.user.id
  end

  def update
    @food = Food.find(params[:id])
    return redirect_to user_path if current_user.id != @food.user.id
    
    if @food.update(food_params)
      redirect_to user_path
    else
      render :edit
    end
  end

  def show
    @food = Food.find(params[:id])
  end

  def destroy
    @food = Food.find(params[:id])
    return redirect_to user_path if current_user.id != @food.user.id
    
    @food.destroy
    redirect_to user_path
  end

  private

  def food_params
    params.require(:food).permit(:image, :meal_type_id, :shop_name, :shop_name_kana, :food_name, :spicy_level_id, :station, :shop_mood_id, :waiting_time_id, :food_comment).merge(user_id: current_user.id)
  end

end
```

```user.rb
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  
  has_many :foods
end
```

```erb
<div class="mypage-contents">
  <header class="mypege-header">
  マイページ
  </header>

  <div class="mypage-main">
    <h2 class="mypage-title">MY KARAI</h2>
      <div class="contents row">
      <p><%= @nickname %>さんの投稿一覧</p>
      <% @foods.each do |food| %>
        <li class="list">
          <div class="food-img-content">
            <%= image_tag food.image, class: "food-img" if food.image.attached? %>

            <div class="food-img-content-more">
              <ul class="more_list">
                <li>
                  <%= link_to '詳細', food_path(food.id), method: :get %>
                </li>
                <% if user_signed_in? && current_user.id == food.user_id %>
                  <li>
                    <%= link_to '編集', edit_food_path(food.id), method: :get %>
                  </li>
                  <li>
                    <%= link_to '削除', food_path(food.id), method: :delete %>
                  </li>
                <% end %>
              </ul>
            </div>

            <div class="food-img-info">
              <h2 class="shop-name">
              <%= food.shop_name%>
              </h2>
              <h2 class="food-name">
              <%= food.food_name%>
              </h2>
              <h3 class="food-spicylevel">
              <%= food.spicy_level.name%>
              </h3>
            </div>
          </div>
        </li>
      <% end %>
      </div>
  </div>

    
<%# 省略 %>
```

# 結論
エラー内容を見るに、
idが２のuserはおりません。と言っています。
おそらく`foodのid`と`userのid`が同じになるようになってしまっています。
ex)id=3のfoodは、id=3のuserが投稿したことになっている。

念の為、Sequel Proでfoodのidを1に変更し、userのidが１のuserで試したところ、
うまく編集できました。

つまり、
foodを投稿したuserになるようにコードを書き換えれば良いのでは？
という結論に至りました。

以下、コードをなんとか記述してみたところ、
以下のようにすれば、うまくいきました。

```
「追記」
うまくいきませんでした。
一瞬うまくいっていたのはなんだったのか。。。
間違えた結論も備忘録として残しますので、その後に最終的な結論を記述します。
紛らわしいことをしてしまい申し訳ありませんでした。
```

### *以下は間違えていたものです(追記)。*
`Before`

```users_controller.rb
class UsersController < ApplicationController

  def show
    user = User.find(params[:id]) #ここを！！
    @nickname = user.nickname
    @foods = user.foods
  end

end
```

`After`

```users_controller.rb
class UsersController < ApplicationController

  def show
    food = Food.find(params[:id]) #こうした！！
    user = User.find(food.user.id)
    @nickname = user.nickname
    @foods = user.foods
  end

end
```

# 追記：最終結論
`Before`

```foods_controller.rb
if @food.update(food_params)
  redirect_to user_path
else
  render :edit
end
```

`After`

```foods_controller.rb
if @food.update(food_params)
  redirect_to user_path(@food.user_id)
else
  render :edit
end
```
`(@food.user_id)`これがなかったため、どこのuser_idなのか分からなかったようです。

# 終わりに
うまくいっていますが、果たして正解なのかどうかが不安なところです。
ただ、間違いなく編集ができているので、ここは先に進みます！

```
エラーを読み取る
↓
分析する
↓
どこが悪いのか分けて考える
↓
原因を突き止める
↓
考えながらコードを書いてみる
```

これを華麗に決めることができたと感じています。


以下今回の参考サイトです。
[Couldn't find Item with 'id'= を解決する](https://qiita.com/mogurinchu/items/61c6358a5972ef000afc)
[ActiveRecord::RecordNotFound in](https://qiita.com/rayile0630/items/5f8178574e60fe1ff14f)

明日も頑張ります！！