前提・実現したいこと
gemはransackで
検索機能を実装していて、検索して、検索結果処理をして、検索結果のビューを表示したいのですが、検索ボタンを押した後にdrinks#search_drinkを反応させたいのですが
何故かdrinks#showが反応して、
Couldn't find Drink with 'id'=searchdrink
といったエラーが起きてます
もっと詳しくいうと、カテゴリ検索的なことがしたくて、
active hashを用いてカテゴリ選択をしていて、
このようにコーヒーの濃さで検索できるようにしたいです
そもそもactive hashを用いたカテゴリだと検索ができないのでしょうか?
とにかくsearch_drinkアクションを反応させたいです
発生している問題・エラーメッセージ
ActiveRecord::RecordNotFound in DrinksController#show Couldn't find Drink with 'id'=searchdrink Extracted source (around line #12): def show @drink = Drink.find(params[:id]) ここがハイライトされてます @user = @drink.user end Rails.root: /Users/soichirohara/coffee_passport Application Trace | Framework Trace | Full Trace app/controllers/drinks_controller.rb:12:in `show'
考えられる原因としてはroutes.rbの記述がうまくいっていない
検索フォームの記述が間違ってる
該当のソースコード
drinks/index.html.erb
ruby
1<h1> 2 商品検索 3</h1> 4<%= search_form_for @p,url: drinks_searchdrink_path do |f| %> 5<%# search_form_for @p(検索オブジェクトを渡すことで 6 検索フォームを生成しています)%> 7 <%= f.collection_select :name_eq,@drink_body,:name,:name,include_blank: '---'%> 8 <%# 第一引数: 検索したいカラム名 9 2: 配列データを指定(今回はdrinkの配列) 10 いわば検索したいカラムのデータ元 11 3: 表示する際に参照するDBのカラム名 12 4: 実際に表示されるカラム名 13 5 何も選択してない時に表示される内容%> 14 <br> 15 <%= f.submit '検索'%> 16<% end %>
routes.rb
ruby
1Rails.application.routes.draw do 2 root to: 'drinks#index' 3 get '/login', to: 'sessions#new' 4 post '/login', to: 'sessions#create' 5 delete '/logout', to: 'sessions#destroy' 6 resources :users do 7 member do 8 get :following,:followers 9 # memberメソッドを使うと 10 # ユーザーidが含まれてるURlを扱うようになる 11 end 12 end 13 resources :drinks, only: [:index,:new,:show,:create,:destroy] do 14 collection do 15 get 'search' 16 end 17 18 19 resources :trades,only: [:index,:new,:create] 20 end 21 post '/drinks/:id/trades/new', to: 'trades#create' 22 get '/drinks/searchdrink', to: 'drinks#search_drink' 23 resources :relationships, only: [:create,:destroy] 24end
drinks_controller
ruby
1 2before_action :searched_drink_object,only:[:index,:search_drink] 3 4 # GET drinks/search_drinks 5 def search_drink 6 @results = @p.result.includes(:body) 7 # 作った検索オブジェクト@pに対して.result 8 # とすると検索結果を取得できる 9 # 検索条件に該当した商品が@pに格納されているので、 10 # その格納されている値を表示する役割があります 11 end 12 13 private 14 def drink_params 15 params.require(:drink_tag).permit(:name,:price,:explain,:image,:tag_name,:region_id,:body_id,:acidity_id,:processing_id).merge(user_id: current_user.id) 16 end 17 18 def searched_drink_object 19 @p = Drink.ransack(params[:q]) 20 # キー(:q)を使ってDrinksテーブルから商品情報を探しています 21 # @pという名前の検索オブジェクトを生成 22 end 23end 24
body.rb
ruby
1class Body < ActiveHash::Base 2 3 self.data = [ 4 { id: 1, name: '--' }, 5 { id: 2, name: 'LIGHT(軽い)' }, 6 { id: 3, name: 'MEDIUM(ほどよい)' }, 7 { id: 4, name: 'FULL(しっかり)' } 8 ] 9end
ログ
Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhObUpuZEhSMWRUVTNNR3huWTJwNGNqaHpaV0kyT1dWaU5HTnZZUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpVldsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SW1sdFp5MXdZWE56Y0c5eWRDMHdOQzB4TG1wd1p5STdJR1pwYkdWdVlXMWxLajFWVkVZdE9DY25hVzFuTFhCaGMzTndiM0owTFRBMExURXVhbkJuQmpzR1ZEb1JZMjl1ZEdWdWRGOTBlWEJsU1NJUGFXMWhaMlV2YW5CbFp3WTdCbFE9IiwiZXhwIjoiMjAyMC0xMi0wOVQxMzoxMzozOC44NDVaIiwicHVyIjoiYmxvYl9rZXkifX0=--725748959cb475c186bdf86c23e9cfad96b9903d/img-passport-04-1.jpg?content_type=image%2Fjpeg&disposition=inline%3B+filename%3D%22img-passport-04-1.jpg%22%3B+filename%2A%3DUTF-8%27%27img-passport-04-1.jpg" for ::1 at 2020-12-09 22:09:46 +0900 Processing by ActiveStorage::DiskController#show as JPEG Parameters: {"content_type"=>"image/jpeg", "disposition"=>"inline; filename=\"img-passport-04-1.jpg\"; filename*=UTF-8''img-passport-04-1.jpg", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhObUpuZEhSMWRUVTNNR3huWTJwNGNqaHpaV0kyT1dWaU5HTnZZUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpVldsdWJHbHVaVHNnWm1sc1pXNWhiV1U5SW1sdFp5MXdZWE56Y0c5eWRDMHdOQzB4TG1wd1p5STdJR1pwYkdWdVlXMWxLajFWVkVZdE9DY25hVzFuTFhCaGMzTndiM0owTFRBMExURXVhbkJuQmpzR1ZEb1JZMjl1ZEdWdWRGOTBlWEJsU1NJUGFXMWhaMlV2YW5CbFp3WTdCbFE9IiwiZXhwIjoiMjAyMC0xMi0wOVQxMzoxMzozOC44NDVaIiwicHVyIjoiYmxvYl9rZXkifX0=--725748959cb475c186bdf86c23e9cfad96b9903d", "filename"=>"img-passport-04-1"} Completed 304 Not Modified in 1ms (ActiveRecord: 0.0ms | Allocations: 362) Started GET "/rails/active_storage/disk/eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhPV0p2YW1jMmQyODBibXB4YmpKd2VIWjNhSEp2TXpZeWJXVm1hUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpQWNacGJteHBibVU3SUdacGJHVnVZVzFsUFNJbE0wWWxNMFlsTTBZbE0wWWxNMFlsTTBZbE0wWWxNMFlsTTBZZ01qQXlNQzB4TWkwd05pQXhOQzR3Tnk0ME5TNXdibWNpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSnlWRk15VTRNaVZDT1NWRk15VTRNaVZCUmlWRk15VTRNeVZCUVNWRk15VTRNeVZDUXlWRk15VTRNeVZDTXlWRk15VTRNaVZDTnlWRk15VTRNeVZCTnlWRk15VTRNeVU0TXlWRk15VTRNeVU0T0NVeU1ESXdNakF0TVRJdE1EWWxNakF4TkM0d055NDBOUzV3Ym1jR093WlVPaEZqYjI1MFpXNTBYM1I1Y0dWSklnNXBiV0ZuWlM5d2JtY0dPd1pVIiwiZXhwIjoiMjAyMC0xMi0wOVQxMzoxMzozOC43ODZaIiwicHVyIjoiYmxvYl9rZXkifX0=--7aaa5870ab16a67f06b3cf82f3184d68c9ba09b3/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202020-12-06%2014.07.45.png?content_type=image%2Fpng&disposition=inline%3B+filename%3D%22%253F%253F%253F%253F%253F%253F%253F%253F%253F+2020-12-06+14.07.45.png%22%3B+filename%2A%3DUTF-8%27%27%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588%25202020-12-06%252014.07.45.png" for ::1 at 2020-12-09 22:09:46 +0900 Processing by ActiveStorage::DiskController#show as PNG Parameters: {"content_type"=>"image/png", "disposition"=>"inline; filename=\"%3F%3F%3F%3F%3F%3F%3F%3F%3F 2020-12-06 14.07.45.png\"; filename*=UTF-8''%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202020-12-06%2014.07.45.png", "encoded_key"=>"eyJfcmFpbHMiOnsibWVzc2FnZSI6IkJBaDdDRG9JYTJWNVNTSWhPV0p2YW1jMmQyODBibXB4YmpKd2VIWjNhSEp2TXpZeWJXVm1hUVk2QmtWVU9oQmthWE53YjNOcGRHbHZia2tpQWNacGJteHBibVU3SUdacGJHVnVZVzFsUFNJbE0wWWxNMFlsTTBZbE0wWWxNMFlsTTBZbE0wWWxNMFlsTTBZZ01qQXlNQzB4TWkwd05pQXhOQzR3Tnk0ME5TNXdibWNpT3lCbWFXeGxibUZ0WlNvOVZWUkdMVGduSnlWRk15VTRNaVZDT1NWRk15VTRNaVZCUmlWRk15VTRNeVZCUVNWRk15VTRNeVZDUXlWRk15VTRNeVZDTXlWRk15VTRNaVZDTnlWRk15VTRNeVZCTnlWRk15VTRNeVU0TXlWRk15VTRNeVU0T0NVeU1ESXdNakF0TVRJdE1EWWxNakF4TkM0d055NDBOUzV3Ym1jR093WlVPaEZqYjI1MFpXNTBYM1I1Y0dWSklnNXBiV0ZuWlM5d2JtY0dPd1pVIiwiZXhwIjoiMjAyMC0xMi0wOVQxMzoxMzozOC43ODZaIiwicHVyIjoiYmxvYl9rZXkifX0=--7aaa5870ab16a67f06b3cf82f3184d68c9ba09b3", "filename"=>"スクリーンショット 2020-12-06 14.07.45"} Completed 304 Not Modified in 2ms (ActiveRecord: 0.0ms | Allocations: 355) Started GET "/drinks/searchdrink?q%5Bname_eq%5D=LIGHT%28%E8%BB%BD%E3%81%84%29&commit=%E6%A4%9C%E7%B4%A2" for ::1 at 2020-12-09 22:09:49 +0900 Processing by DrinksController#show as HTML Parameters: {"q"=>{"name_eq"=>"LIGHT(軽い)"}, "commit"=>"検索", "id"=>"searchdrink"} Drink Load (0.3ms) SELECT `drinks`.* FROM `drinks` WHERE `drinks`.`id` = NULL LIMIT 1 ↳ app/controllers/drinks_controller.rb:12:in `show' Completed 404 Not Found in 3ms (ActiveRecord: 0.3ms | Allocations: 1485)
と、showアクションが反応してしまいます
パラメーターは
{"q" => {"name_eq" => "MEDIUM(表される)"}、 "commit" => "検索"、 "id" => "searchdrink"}
でした
試したこと
rails routesを実行して
ruby
1 drinks_searchdrink GET /drinks/searchdrink(.:format) drinks#search_drink
があることを確認できました
これをurl指定してると思うので、何故drinks#showが反応してしまうのか、
search_drinkアクションを反応させるにはどうしたらいいか
ご教授いただけると幸いです
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/09 14:25