{"record":{"id":"bd1b54b1f68d8e67","repo":"instructure/canvas-lms","slug":"context-required","errorCode":null,"errorMessage":"context required","messagePattern":"context required","errorType":"exception","errorClass":"RuntimeError","httpStatus":null,"severity":"error","filePath":"app/models/rubric_association.rb","lineNumber":255,"sourceCode":"    assessment_request = assessment_requests.where(user_id: assessee).first\n    assessment_request ||= assessment_requests.build(user: assessee)\n    assessment_request.send_reminder! if assessment_request.assigned?\n    assessment_request\n  end\n\n  def update_rubric\n    return if skip_updating_rubric_association_count\n\n    rubric.update_association_count\n  end\n  protected :update_rubric\n\n  def unsubmitted_users\n    context.students - rubric_assessments.map(&:user) - assessment_requests.map(&:user)\n  end\n\n  def self.generate(current_user, rubric, context, params)\n    raise \"context required\" unless context\n\n    association_object = params.delete :association_object\n    if (association_id = params.delete(:id)) && association_id.present?\n      association = RubricAssociation.where(id: association_id).first\n    end\n    association = nil unless association && association.context == context && association.association_object == association_object\n    raise \"association required\" unless association || association_object\n\n    # Update/create the association -- this is what ties the rubric to an entity\n    update_if_existing = params.delete(:update_if_existing)\n    if params[:hide_points] == \"1\"\n      params[:use_for_grading] = \"0\"\n      params[:hide_score_total] = \"0\"\n    end\n    association ||= rubric.associate_with(\n      association_object,\n      context,\n      current_user:,","sourceCodeStart":237,"sourceCodeEnd":273,"githubUrl":"https://github.com/instructure/canvas-lms/blob/1c9f0bb8013ed69c4f2efe11fd483025469b7e6c/app/models/rubric_association.rb#L237-L273","documentation":"RubricAssociation.generate is the factory that creates/updates a rubric association for a course or account context. Canvas raises this RuntimeError when the context argument is nil, since every association must belong to a course/account and permissions are checked against it.","triggerScenarios":"Calling RubricAssociation.generate(current_user, rubric, nil, params) — usually when the course/account lookup returned nil or a variable was not initialized.","commonSituations":"Controllers using @context that is nil due to routing/context-loading failures; importers or API code creating rubric associations outside a course; scripts with unassigned context variables.","solutions":["Pass the actual context (course or account): RubricAssociation.generate(user, rubric, course, params)","Verify the course/account was loaded successfully before calling generate","Guard the call site with an early return or clearer error when context is blank"],"exampleFix":"// before\nRubricAssociation.generate(user, rubric, nil, params)\n// after\nraise \"course not found\" unless course\nRubricAssociation.generate(user, rubric, course, params)","handlingStrategy":"validation","validationCode":"raise ArgumentError, \"context required\" if context.blank?","typeGuard":"def valid_context?(c) = c.is_a?(Course) || c.is_a?(Account)","tryCatchPattern":"begin\n  RubricAssociation.generate(user, rubric, context, params)\nrescue RuntimeError => e\n  raise unless e.message == \"context required\"\n  Rails.logger.error(\"rubric generation without context\")\nend","preventionTips":["Ensure @context/course is loaded before rubric operations","Fail fast with clearer errors when context resolution fails","Never call factories with possibly-nil arguments"],"tags":["ruby","rails","rubrics","missing-argument"],"backgroundTag":"missing-required-argument","analyzedSha":"1c9f0bb8013ed69c4f2efe11fd483025469b7e6c","analyzedAt":"2026-09-15T20:33:18.891Z","contentChangedAt":"2026-09-15T20:33:18.891Z","schemaVersion":2},"datasetVersion":"2026-09-23T02:17:17.105Z"}