prestar
@prestar

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

出品詳細ページにてその出品者の他の出品一覧も表示したい

解決したいこと

出品詳細ページ(show.html.erb)にて、その出品者の他の出品一覧も表示したい

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

ActiveRecord::RecordNotFound in ItemsController#show
Couldn't find User with 'id'=41

該当するソースコード

▼routes.rb

root to: 'items#index'
  resources :items
  resources :users

▼models/users.rb

class User < ApplicationRecord

has_many :items

▼models/items.rb

class Item < ApplicationRecord

belongs_to :user, foreign_key: 'user_id'

▼controllers/items_controller.rb

class ItemsController < ApplicationController

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

▼views/items/show.html.erb

<% @other_items.each do |item| %>
  <%= link_to item_path(item.id) do %>
    <%= image_tag(@item.images[0].url) %>
  <% end %>
<% end %>

↓出品者のマイページであれば下記の記述で表示できました

class UsersController < ApplicationController

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

ご教授いただけないでしょうか。
宜しくお願い致します。

0

1Answer

直接的な原因としましては、エラー文に書いてある通り、id が41である User を探して見つからなかったためにエラーが発生しています。
ActiveRecordfindは与えられたidでレコードが見つからなかった場合ActiveRecord::RecordNotFoundのエラーとなります。(参考)

ではそれがどこで起きているか、という間接的な原因ですが、ItemsController の4行目で、itemidを基にUserを探してエラーが発生しているように見えます。

@user = User.find(params[:id])

なので恐らく以下のような形になるのではないでしょうか?(実際に動作確認してないです)

class ItemsController < ApplicationController

def show
  @item = Item.find(params[:id])
  @other_items = @item.user.items
end

要は、item.id->item->user(id = item.user_id)->items(user_id = user.id)とデータを探っていく流れです。

1Like

Comments

  1. @prestar

    Questioner

    ありがとうございます!!実装できました...!
    本当に嬉しいです。ありがとうございます!

Your answer might help someone💌