params[:keyword]で複数ワードが入力された際に、該当するデータをもつOfficeを取得するようにしたいです。
現状だと、「東京」と1単語入力の際は、Officeを表示させることができますが、「東京 福岡」と複数単語を入力すると、エラーが出てしまう状態です。
ruby
1 def search 2 if params[:city_id] 3 pagy, offices = pagy Office.where(city_id: params[:city_id]) 4 elsif params[:keyword] 5 keywords = params[:keyword].split(/[[:blank:]]+/).select(&:present?) 6 relation = like_(keywords.shift) 7 keywords.each{ |keyword| relation.or(like_keyword) } 8 pagy, offices = pagy relation 9 else 10 pagy, offices = pagy(Office.all) 11 end 12 pagy_headers_merge(pagy) 13 render json: offices, each_serializer: OfficeIndexSerializer, include: '**' 14 end 15 16 def like_(keyword) 17 Office.where('name LIKE ? OR address LIKE ? OR near_station LIKE ? OR introduction LIKE ? OR company LIKE ?',"%#{keyword}%", "%#{keyword}%", "%#{keyword}%", "%#{keyword}%", "%#{keyword}%") 18 end
api_1 | Started GET "/offices/search?keyword=%E6%9D%B1%E4%BA%AC%E3%80%80%E7%A6%8F" for 172.21.0.1 at 2020-09-29 01:54:46 +0000 api_1 | Processing by OfficesController#search as */* api_1 | Parameters: {"keyword"=>"東京 福"} api_1 | Completed 500 Internal Server Error in 156ms (ActiveRecord: 0.0ms | Allocations: 76554) api_1 | api_1 | api_1 | api_1 | NameError (undefined local variable or method `like_keyword' for #<OfficesController:0x00007f7de8024578> api_1 | Did you mean? keyword): api_1 | api_1 | app/controllers/offices_controller.rb:23:in `block in search' api_1 | app/controllers/offices_controller.rb:23:in `each' api_1 | app/controllers/offices_controller.rb:23:in `search'
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。