{"record":{"id":"1593515d582a252a","repo":"public-activity/public_activity","slug":"no-key-provided-for-self-class-name","errorCode":null,"errorMessage":"No key provided for #{self.class.name}","messagePattern":"No key provided for #(.+?)","errorType":"exception","errorClass":"PublicActivity::NoKeyProvided","httpStatus":null,"severity":"error","filePath":"lib/public_activity/common.rb","lineNumber":292,"sourceCode":"    end\n\n    # Prepares settings used during creation of Activity record.\n    # params passed directly to tracked model have priority over\n    # settings specified in tracked() method\n    #\n    # @see #create_activity\n    # @return [Hash] Settings with preserved options that were passed\n    # @api private\n    # @overload prepare_settings(action, options = {})\n    #   @see #create_activity\n    # @overload prepare_settings(options = {})\n    #   @see #create_activity\n    def prepare_settings(*args)\n      raw_options = args.extract_options!\n      action      = [args.first, raw_options.delete(:action)].compact.first\n      key         = prepare_key(action, raw_options)\n\n      raise NoKeyProvided, \"No key provided for #{self.class.name}\" unless key\n\n      prepare_custom_fields(raw_options.except(:params)).merge(\n        {\n          key:        key,\n          owner:      prepare_relation(:owner,     raw_options),\n          recipient:  prepare_relation(:recipient, raw_options),\n          parameters: prepare_parameters(raw_options),\n        }\n      )\n    end\n\n    # Prepares and resolves custom fields\n    # users can pass to `tracked` method\n    # @private\n    def prepare_custom_fields(options)\n      customs = self.class.activity_custom_fields_global.clone\n      customs.merge!(activity_custom_fields) if activity_custom_fields\n      customs.merge!(options)","sourceCodeStart":274,"sourceCodeEnd":310,"githubUrl":"https://github.com/public-activity/public_activity/blob/1f3a5568adcb55317552b7528cc489b8ccbbb306/lib/public_activity/common.rb#L274-L310","documentation":"Error \"No key provided for #{self.class.name}\" thrown in public-activity/public_activity.","triggerScenarios":"Raised by prepare_settings in lib/public_activity/common.rb:292 when no activity key can be resolved. Triggers when create_activity is called without an action argument and without an :action or :key option, and the model class was not declared with tracked(...) providing a default key. Common when the caller forgets to pass the action (e.g. article.create_activity with no arguments), or when the tracked block's key generation returned nil.","commonSituations":"See trigger scenarios.","solutions":["Pass an explicit key when calling create_activity: record.create_activity(key: 'article.create').","Derive the key by passing an action symbol: record.create_activity(action: :create), so prepare_key builds '<model>.<action>'.","Ensure the key/action option is not nil before tracking: check options[:key] and options[:action] in your tracked call."],"exampleFix":"@article.create_activity(key: 'article.comment', owner: current_user, parameters: {comment: params[:comment]})","handlingStrategy":null,"validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"1f3a5568adcb55317552b7528cc489b8ccbbb306","analyzedAt":"2026-08-23T14:30:56.210Z","schemaVersion":2},"datasetVersion":"2026-08-23T16:17:53.355Z"}