File tree Expand file tree Collapse file tree 3 files changed +43
-4
lines changed
Expand file tree Collapse file tree 3 files changed +43
-4
lines changed Original file line number Diff line number Diff line change 11en :
22 administrate_ransack :
3+ # # Optional error key
4+ # errors:
5+ # invalid_search: Invalid search term!
36 filters :
47 ' clear_filters ' : Clear filters
58 ' no ' : ' No'
Original file line number Diff line number Diff line change @@ -7,7 +7,7 @@ module Searchable
77 def scoped_resource
88 options = respond_to? ( :ransack_options , true ) ? ransack_options : { }
99 distinct = respond_to? ( :ransack_result_distinct , true ) ? ransack_result_distinct : true
10- @ransack_results = super . ransack ( params [ :q ] , ** options )
10+ @ransack_results = prepare_search ( resource_collection : super , query_params : params [ :q ] , options : options )
1111 @ransack_results . result ( distinct : distinct )
1212 end
1313
@@ -25,5 +25,26 @@ def prepended(base)
2525 base . helper_method :sanitized_order_params
2626 end
2727 end
28+
29+ private
30+
31+ def prepare_search ( resource_collection :, query_params :, options :)
32+ resource_collection . ransack ( query_params , **options )
33+ rescue ArgumentError => e
34+ if defined? ( Ransack ::InvalidSearchError ) && e . is_a? ( Ransack ::InvalidSearchError ) # rubocop:disable Style/GuardClause
35+ ransack_invalid_search_error ( e )
36+ resource_collection . ransack ( { } , **options )
37+ else
38+ raise e
39+ end
40+ end
41+
42+ def ransack_invalid_search_error ( error )
43+ if respond_to? ( :invalid_search_callback , true )
44+ invalid_search_callback ( error )
45+ else
46+ flash . now [ :alert ] = I18n . t ( 'administrate_ransack.errors.invalid_search' , default : error . message )
47+ end
48+ end
2849 end
2950end
Original file line number Diff line number Diff line change 88 expect ( assigns ( :ransack_results ) ) . to be_instance_of Ransack ::Search
99 end
1010
11- context "when ransack_options is defined" do
12- it "raises an exception with an invalid parameter" do
11+ context "when an invalid search term is provided" do
12+ it "shows an alert message" , :aggregate_failures do
13+ get :index , params : { "q[title2_cont]" => "test" , "q[category_eq]" => "news" }
14+
15+ expect ( assigns ( :ransack_results ) ) . to be_instance_of Ransack ::Search
16+ expect ( flash [ :alert ] ) . to eq 'Invalid search term title2_cont'
17+ end
18+ end
19+
20+ context "when an invalid_search_callback method is defined and an invalid search term is provided" do
21+ controller do
22+ def invalid_search_callback ( error )
23+ raise "Some error: #{ error . message } "
24+ end
25+ end
26+
27+ it "executes the callback method" do
1328 expect {
1429 get :index , params : { "q[title2_cont]" => "test" }
15- } . to raise_exception ( ArgumentError , ' Invalid search term title2_cont' )
30+ } . to raise_exception ( "Some error: Invalid search term title2_cont" )
1631 end
1732 end
1833 end
You can’t perform that action at this time.
0 commit comments