             # return student with given id if a string; otherwise, just return student (the input)
             if typeof(student)=='string' then @state.students?.get(student) else student
 
+        get_grade: (assignment, student) =>
+            return @get_assignment(assignment)?.get('grades')?.get(@get_student(student)?.get('student_id'))
+
         get_assignments: => @state.assignments
 
         get_sorted_assignments: =>

        flux       : rtypes.object.isRequired
        student    : rtypes.oneOfType([rtypes.string,rtypes.object]).isRequired # required string (student_id) or student immutable js object
        assignment : rtypes.oneOfType([rtypes.string,rtypes.object]).isRequired # required string (assignment_id) or assignment immutable js object

    open: (type, assignment_id, student_id) ->
        @props.flux.getActions(@props.name).open_assignment(type, assignment_id, student_id)

    copy: (type, assignment_id, student_id) ->
        @props.flux.getActions(@props.name).copy_assignment(type, assignment_id, student_id)

    render_last: (name, obj, type, info, enable_copy) ->
        open = => @open(type, info.assignment_id, info.student_id)

            @_update
                set   : {deleted: false}
                where : {assignment_id: assignment.get('assignment_id'), table: 'assignments'}

        set_grade: (assignment, student, grade) =>
            assignment = store.get_assignment(assignment)
            student    = store.get_student(student)
            where      = {table:'assignments', assignment_id:assignment.get('assignment_id')}
            grades     = syncdb.select_one(where:where).grades ? {}
            grades[student.get('student_id')] = grade
            @_update(set:{grades:grades}, where:where)

        # Copy the files for the given assignment_id from the given student to the
        # corresponding collection folder.
