ransack
ransack copied to clipboard
All negative search in deep join not working
class Customer < ApplicationRecord
acts_as_taggable
end
Gemfile.lock part
acts-as-taggable-on (= 8.1.0)
rails (6.1.4)
actioncable (= 6.1.4)
actionmailbox (= 6.1.4)
actionmailer (= 6.1.4)
actionpack (= 6.1.4)
actiontext (= 6.1.4)
actionview (= 6.1.4)
activejob (= 6.1.4)
activemodel (= 6.1.4)
activerecord (= 6.1.4)
activestorage (= 6.1.4)
activesupport (= 6.1.4)
bundler (>= 1.15.0)
railties (= 6.1.4)
ransack (2.4.2)
activerecord (>= 5.2.4)
activesupport (>= 5.2.4)
i18n
- not_eq
irb(main):017:0> Customer.ransack({"tags_name_not_eq"=>'test'}).result
Traceback (most recent call last):
1: from (irb):17
NoMethodError (undefined method `eq' for nil:NilClass)
- eq
irb(main):019:0> Customer.ransack({"tags_name_eq"=>"test"}).result
Customer Load (0.5ms) SELECT `customers`.* FROM `customers` LEFT OUTER JOIN `taggings` ON `taggings`.`taggable_type` = 'Customer' AND `taggings`.`context` = 'tags' AND `taggings`.`taggable_id` = `customers`.`id` LEFT OUTER JOIN `tags` ON `tags`.`id` = `taggings`.`tag_id` WHERE `tags`.`name` = 'test' /* loading for inspect */ LIMIT 11
- not_in
irb(main):021:0> Customer.ransack({"tags_name_not_in"=>["test"]}).result
Traceback (most recent call last):
2: from (irb):21
1: from (irb):21:in `rescue in irb_binding'
NoMethodError (undefined method `eq' for nil:NilClass)
- in
irb(main):022:0> Customer.ransack({"tags_name_in"=>["test"]}).result
Customer Load (0.5ms) SELECT `customers`.* FROM `customers` LEFT OUTER JOIN `taggings` ON `taggings`.`taggable_type` = 'Customer' AND `taggings`.`context` = 'tags' AND `taggings`.`taggable_id` = `customers`.`id` LEFT OUTER JOIN `tags` ON `tags`.`id` = `taggings`.`tag_id` WHERE `tags`.`name` IN ('test') /* loading for inspect */ LIMIT 11
Full backtrace when ransack in controller
--------------
- ransack (2.4.2) lib/ransack/adapters/active_record/context.rb:174:in `build_correlated_subquery'
- ransack (2.4.2) lib/ransack/adapters/active_record/ransack/nodes/condition.rb:9:in `block in arel_predicate'
- ransack (2.4.2) lib/ransack/adapters/active_record/ransack/nodes/condition.rb:6:in `arel_predicate'
- ransack (2.4.2) lib/ransack/visitor.rb:17:in `visit_Ransack_Nodes_Condition'
- ransack (2.4.2) lib/ransack/visitor.rb:42:in `visit'
- ransack (2.4.2) lib/ransack/visitor.rb:5:in `accept'
- ransack (2.4.2) lib/ransack/adapters/active_record/ransack/visitor.rb:4:in `block in visit_and'
- ransack (2.4.2) lib/ransack/adapters/active_record/ransack/visitor.rb:4:in `visit_and'
- ransack (2.4.2) lib/ransack/visitor.rb:24:in `visit_Ransack_Nodes_Grouping'
- ransack (2.4.2) lib/ransack/visitor.rb:42:in `visit'
- ransack (2.4.2) lib/ransack/visitor.rb:5:in `accept'
- ransack (2.4.2) lib/ransack/adapters/active_record/context.rb:26:in `evaluate'
- ransack (2.4.2) lib/ransack/search.rb:38:in `result'
- app/helpers/crm/application_helper.rb:25:in `inquiry_collection'
- app/controllers/crm/inquiries_controller.rb:42:in `index'
- actionpack (6.1.4) lib/action_controller/metal/basic_implicit_render.rb:6:in `send_action'
- actionpack (6.1.4) lib/abstract_controller/base.rb:228:in `process_action'
- actionpack (6.1.4) lib/action_controller/metal/rendering.rb:30:in `process_action'
- actionpack (6.1.4) lib/abstract_controller/callbacks.rb:42:in `block in process_action'
- activesupport (6.1.4) lib/active_support/callbacks.rb:117:in `block in run_callbacks'
- activesupport (6.1.4) lib/active_support/callbacks.rb:137:in `run_callbacks'
- actionpack (6.1.4) lib/abstract_controller/callbacks.rb:41:in `process_action'
- actionpack (6.1.4) lib/action_controller/metal/rescue.rb:22:in `process_action'
- actionpack (6.1.4) lib/action_controller/metal/instrumentation.rb:34:in `block in process_action'
- activesupport (6.1.4) lib/active_support/notifications.rb:203:in `block in instrument'
- activesupport (6.1.4) lib/active_support/notifications/instrumenter.rb:24:in `instrument'
- activesupport (6.1.4) lib/active_support/notifications.rb:203:in `instrument'
- actionpack (6.1.4) lib/action_controller/metal/instrumentation.rb:33:in `process_action'
- actionpack (6.1.4) lib/action_controller/metal/params_wrapper.rb:249:in `process_action'
- activerecord (6.1.4) lib/active_record/railties/controller_runtime.rb:27:in `process_action'
- actionpack (6.1.4) lib/abstract_controller/base.rb:165:in `process'
- actionview (6.1.4) lib/action_view/rendering.rb:39:in `process'
- actionpack (6.1.4) lib/action_controller/metal.rb:190:in `dispatch'
- actionpack (6.1.4) lib/action_controller/metal.rb:254:in `dispatch'
- actionpack (6.1.4) lib/action_dispatch/routing/route_set.rb:50:in `dispatch'
- actionpack (6.1.4) lib/action_dispatch/routing/route_set.rb:33:in `serve'
- actionpack (6.1.4) lib/action_dispatch/journey/router.rb:50:in `block in serve'
- actionpack (6.1.4) lib/action_dispatch/journey/router.rb:32:in `serve'
- actionpack (6.1.4) lib/action_dispatch/routing/route_set.rb:842:in `call'
- omniauth (1.9.1) lib/omniauth/strategy.rb:192:in `call!'
- omniauth (1.9.1) lib/omniauth/strategy.rb:169:in `call'
- omniauth (1.9.1) lib/omniauth/strategy.rb:192:in `call!'
- omniauth (1.9.1) lib/omniauth/strategy.rb:169:in `call'
- sentry-rails (4.4.0) lib/sentry/rails/rescued_exception_interceptor.rb:12:in `call'
- warden (1.2.9) lib/warden/manager.rb:36:in `block in call'
- warden (1.2.9) lib/warden/manager.rb:34:in `call'
- rack (2.2.3) lib/rack/tempfile_reaper.rb:15:in `call'
- rack (2.2.3) lib/rack/etag.rb:27:in `call'
- rack (2.2.3) lib/rack/conditional_get.rb:40:in `call'
- rack (2.2.3) lib/rack/head.rb:12:in `call'
- actionpack (6.1.4) lib/action_dispatch/http/permissions_policy.rb:22:in `call'
- actionpack (6.1.4) lib/action_dispatch/http/content_security_policy.rb:18:in `call'
- rack (2.2.3) lib/rack/session/abstract/id.rb:266:in `context'
- rack (2.2.3) lib/rack/session/abstract/id.rb:260:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/cookies.rb:689:in `call'
- activerecord (6.1.4) lib/active_record/migration.rb:601:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/callbacks.rb:27:in `block in call'
- activesupport (6.1.4) lib/active_support/callbacks.rb:98:in `run_callbacks'
- actionpack (6.1.4) lib/action_dispatch/middleware/callbacks.rb:26:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/actionable_exceptions.rb:18:in `call'
- better_errors (2.9.1) lib/better_errors/middleware.rb:87:in `protected_app_call'
- better_errors (2.9.1) lib/better_errors/middleware.rb:82:in `better_errors_call'
- better_errors (2.9.1) lib/better_errors/middleware.rb:60:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/debug_exceptions.rb:29:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/show_exceptions.rb:33:in `call'
- railties (6.1.4) lib/rails/rack/logger.rb:37:in `call_app'
- railties (6.1.4) lib/rails/rack/logger.rb:26:in `block in call'
- activesupport (6.1.4) lib/active_support/tagged_logging.rb:99:in `block in tagged'
- activesupport (6.1.4) lib/active_support/tagged_logging.rb:37:in `tagged'
- activesupport (6.1.4) lib/active_support/tagged_logging.rb:99:in `tagged'
- railties (6.1.4) lib/rails/rack/logger.rb:26:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/remote_ip.rb:81:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/request_id.rb:26:in `call'
- rack (2.2.3) lib/rack/method_override.rb:24:in `call'
- rack (2.2.3) lib/rack/runtime.rb:22:in `call'
- activesupport (6.1.4) lib/active_support/cache/strategy/local_cache_middleware.rb:29:in `call'
- sentry-ruby-core (4.4.2) lib/sentry/rack/capture_exceptions.rb:23:in `block in call'
- sentry-ruby-core (4.4.2) lib/sentry/hub.rb:56:in `with_scope'
- sentry-ruby-core (4.4.2) lib/sentry-ruby.rb:165:in `with_scope'
- sentry-ruby-core (4.4.2) lib/sentry/rack/capture_exceptions.rb:14:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/executor.rb:14:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/static.rb:24:in `call'
- rack (2.2.3) lib/rack/sendfile.rb:110:in `call'
- actionpack (6.1.4) lib/action_dispatch/middleware/host_authorization.rb:92:in `call'
- webpacker (5.4.0) lib/webpacker/dev_server_proxy.rb:25:in `perform_request'
- rack-proxy (0.7.0) lib/rack/proxy.rb:63:in `call'
- railties (6.1.4) lib/rails/engine.rb:539:in `call'
- puma (5.3.1) lib/puma/configuration.rb:249:in `call'
- puma (5.3.1) lib/puma/request.rb:76:in `block in handle_request'
- puma (5.3.1) lib/puma/thread_pool.rb:338:in `with_force_shutdown'
- puma (5.3.1) lib/puma/request.rb:75:in `handle_request'
- puma (5.3.1) lib/puma/server.rb:437:in `process_client'
- puma (5.3.1) lib/puma/thread_pool.rb:145:in `block in spawn_thread'
related issues: https://github.com/activerecord-hackery/ransack/issues/925
I think I found the issue, not sure, but if I change in the Context#extract_correlated_key to detect children its working..
when Arel::Nodes::And
if join_root.children.any?
join_root.children.each do |child|
eck = extract_correlated_key(child)
return eck unless eck.nil?
end
else
extract_correlated_key(join_root.left) || extract_correlated_key(join_root.right)
end
i have same issue