前提・実現したいこと
【前提】
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'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/17 03:00