From b24e8ae2a7ac4891d614599c662e8fcbb6a9bf5a Mon Sep 17 00:00:00 2001 From: evazion Date: Fri, 14 Oct 2022 20:11:16 -0500 Subject: [PATCH] Fix #5289: NoMethodError in /?search=. --- app/controllers/application_controller.rb | 2 +- test/functional/application_controller_test.rb | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 32811a98f..6639253bb 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -248,7 +248,7 @@ class ApplicationController < ActionController::Base # => /tags?search[name]=touhou def normalize_search return unless request.get? || request.head? - params[:search] ||= ActionController::Parameters.new + params[:search] = ActionController::Parameters.new unless params[:search].is_a?(ActionController::Parameters) deep_reject_blank = lambda do |hash| hash.reject { |_k, v| v.blank? || (v.is_a?(Hash) && deep_reject_blank.call(v).blank?) } diff --git a/test/functional/application_controller_test.rb b/test/functional/application_controller_test.rb index d8eb31429..edbb71528 100644 --- a/test/functional/application_controller_test.rb +++ b/test/functional/application_controller_test.rb @@ -342,6 +342,20 @@ class ApplicationControllerTest < ActionDispatch::IntegrationTest assert_equal([tags[0].id], response.parsed_body.pluck("id")) end + should "remove blank `search` params from the URL" do + get tags_path(search: { name: "touhou", blah: "" }), as: :json + + assert_redirected_to tags_path(search: { name: "touhou" }) + end + + should "ignore invalid `search` params" do + get tags_path(search: "foo"), as: :json + assert_response :success + + get tags_path("search[]": "foo"), as: :json + assert_response :success + end + should "support the expiry parameter" do get posts_path, as: :json, params: { expiry: "1" }