{"record":{"id":"e4331e83ccb40833","repo":"activerecord-hackery/ransack","slug":"don-t-know-what-context-to-use-for-object","errorCode":null,"errorMessage":"Don't know what context to use for #{object}","messagePattern":"Don't know what context to use for #(.+?)","errorType":"exception","errorClass":"ArgumentError","httpStatus":null,"severity":"error","filePath":"lib/ransack/context.rb","lineNumber":31,"sourceCode":"          Adapters::ActiveRecord::Context.new(klass, options)\n        end\n      end\n\n      def for_object(object, options = {})\n        case object\n        when ActiveRecord::Relation\n          Adapters::ActiveRecord::Context.new(object.klass, options)\n        end\n      end\n\n      def for(object, options = {})\n        context =\n          if Class === object\n            for_class(object, options)\n          else\n            for_object(object, options)\n          end\n        context or raise ArgumentError,\n          \"Don't know what context to use for #{object}\"\n      end\n\n    end # << self\n\n    def initialize(object, options = {})\n      @object = relation_for(object)\n      @klass = @object.klass\n      @join_dependency = join_dependency(@object)\n      @join_type = options[:join_type] || Polyamorous::OuterJoin\n      @search_key = options[:search_key] || Ransack.options[:search_key]\n      @associations_pot = {}\n      @tables_pot = {}\n      @lock_associations = []\n\n      @base = @join_dependency.instance_variable_get(:@join_root)\n    end\n","sourceCodeStart":13,"sourceCodeEnd":49,"githubUrl":"https://github.com/activerecord-hackery/ransack/blob/e82f6bab3956c5597e7debbefa218d9e94e58ceb/lib/ransack/context.rb#L13-L49","documentation":"Ransack::Context.for is the factory used by Ransack::Search.new to build a query context. It only knows how to handle (a) classes that inherit from ActiveRecord::Base and (b) ActiveRecord::Relation instances. Anything else — a String class name, a model instance, a non-ActiveRecord object — returns nil from both for_class and for_object, and this ArgumentError is raised.","triggerScenarios":"Ransack::Search.new('Person', params) (string name), Ransack::Search.new(person_instance, params) (single record), Person.ransack where the adapter is missing, or passing a Mongoid/other-ORM model that has no Ransack adapter.","commonSituations":"Porting old code that passed class names as strings (no longer supported); passing @person = Person.find(...) instead of the class or a relation; attempting to use Ransack with a non-ActiveRecord ORM; accidentally calling .ransack on an array from a plain Ruby query.","solutions":["Pass the model class: Person.ransack(params[:q])","Or pass an ActiveRecord::Relation: Person.where(active: true).ransack(params[:q])","If you have a record, use record.class.ransack(...)","For non-AR models, Ransack will not work — write the query manually or use an AR-backed model"],"exampleFix":"# before\n@q = Ransack::Search.new('Person', params[:q])\n# => ArgumentError: Don't know what context to use for Person\n\n# after\n@q = Person.ransack(params[:q])","handlingStrategy":"type-guard","validationCode":"target = Person if target.is_a?(Person)\ntarget = target.class if target.is_a?(ActiveRecord::Base)\ntarget = target.klass if target.is_a?(ActiveRecord::Relation)\n\n@q = if target.is_a?(Class) && target < ActiveRecord::Base\n  target.ransack(params[:q])\nelse\n  Person.ransack(params[:q])\nend","typeGuard":"def ransackable_target?(obj)\n  (obj.is_a?(Class) && obj < ActiveRecord::Base) || obj.is_a?(ActiveRecord::Relation)\nend","tryCatchPattern":null,"preventionTips":["Always construct searches via Model.ransack / Model.all.ransack rather than Ransack::Search.new directly","Never pass class-name strings or model instances — both are rejected by the context factory","In shared code, guard with respond_to?(:ransack) before calling"],"tags":["ruby","rails","ransack","activerecord","search","argumenterror"],"backgroundTag":"unsupported-object-type","analyzedSha":"e82f6bab3956c5597e7debbefa218d9e94e58ceb","analyzedAt":"2026-08-21T19:30:23.639Z","schemaVersion":2},"datasetVersion":"2026-08-21T23:17:16.201Z"}