質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

1回答

991閲覧

【検索機能】ユーザーに紐づく商品の取得

_nussy_

総合スコア5

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/11/17 01:30

前提・実現したいこと

【前提】
Railsでアプリケーションを作成しています。
困っているので教えていただけると幸いです。
検索機能を用いて、ユーザーに紐づく商品を取得するコードを記述しています。

【実現したいこと】
検索機能の実装
商品一覧からユーザー名で検索してもらい、該当するユーザーの商品を表示させたいです。

binding.pryでデータの取得する流れも添付しています。
拙い箇所が多々ありますが、ご協力よろしくお願いします。

発生している問題・エラーメッセージ

ActiveRecord::RecordNotFound in UsersController#search Couldn't find Item with 'id'={:user_id=>[1]} user_id = 1 のitemはDBに存在します。

該当のソースコード

(model/user) (カラム名など、略) def self.search(search) if search != "" User.where('nickname LIKE(?)', "%#{search}%") else User.all end end #Association has_many :items (model/item) #Association belongs_to :user (controller/users) def search binding.pry @user = User.search(params[:nickname]) @users = @user.ids @items = Item.find(user_id: @users) =>エラー対象 # @item = Item.all => itemsテーブルのデータは取得可 end (search.html.erb) <%= form_with(url: search_users_path, local: true, method: :get, class: "search-form") do |f| %> <%= f.text_field :nickname, placeholder: "投稿を検索する", class: "search-input", size: "50" %> <%= f.submit "検索", class: "search-btn" %> <% end %> (略)  <% @items.each do |item|%> (略) 最終的に、@itemsで該当するユーザーの商品の1つずつ表示しようとしています。

試したこと

binding.pryを用いたデータ取得の確認。

 binding.pryの結果。
[1] pry(#<UsersController>)> @user = User.search(params[:nickname])
User Load (0.6ms) SELECT users.* FROM users WHERE (nickname LIKE('%山%'))
↳ app/controllers/users_controller.rb:4:in `search'
=> [#<User id: 1, nickname: "山中", email: "sample@sample.com", created_at: "2020-11-09 15:09:11", updated_at: "2020-11-13 09:51:43">]
[2] pry(#<UsersController>)> @users = @user.ids
=> [1]

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

ruby '2.6.5'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

find は ID を検索するメソッドです。
{:user_id=>[1]}というIDがないか検索してしまっています(ないのでエラー)

ruby

1@user = User.search(params[:nickname]) 2Item.where(user_id: @user.ids) 3

投稿2020/11/17 02:53

neko_daisuki

総合スコア2090

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_nussy_

2020/11/17 03:00

neko_daisuki 様 助かりました。思い通りに挙動しました。 またリファクタリングもしていただき、ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問