diff --git a/app/controllers/exercises_controller.rb b/app/controllers/exercises_controller.rb index dc854fe9..337cb9d4 100644 --- a/app/controllers/exercises_controller.rb +++ b/app/controllers/exercises_controller.rb @@ -411,17 +411,22 @@ class ExercisesController < ApplicationController end else # redirect to feedback page if score is less than 100 percent - redirect_to_user_feedback + redirect_to_user_feedback return end redirect_to_lti_return_path end def redirect_to_user_feedback - if UserExerciseFeedback.find_by(exercise: @exercise, user: current_user) - redirect_to(edit_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id})) - else - redirect_to(new_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id})) + url = if UserExerciseFeedback.find_by(exercise: @exercise, user: current_user) + edit_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id}) + else + new_user_exercise_feedback_path(user_exercise_feedback: {exercise_id: @exercise.id}) + end + + respond_to do |format| + format.html { redirect_to(url) } + format.json { render(json: {redirect: url}) } end end diff --git a/app/models/user_exercise_feedback.rb b/app/models/user_exercise_feedback.rb index 4ff9626e..78d84972 100644 --- a/app/models/user_exercise_feedback.rb +++ b/app/models/user_exercise_feedback.rb @@ -1,6 +1,6 @@ class UserExerciseFeedback < ActiveRecord::Base + include Creation - belongs_to :user, polymorphic: true belongs_to :exercise validates :user_id, uniqueness: { scope: [:exercise_id, :user_type] } diff --git a/app/policies/user_exercise_feedback_policy.rb b/app/policies/user_exercise_feedback_policy.rb index f005cc0d..20a89a6e 100644 --- a/app/policies/user_exercise_feedback_policy.rb +++ b/app/policies/user_exercise_feedback_policy.rb @@ -1,38 +1,19 @@ -class UserExerciseFeedbackPolicy < AdminOrAuthorPolicy +class UserExerciseFeedbackPolicy < ApplicationPolicy def author? @user == @record.author end private :author? - def batch_update? - admin? - end - def create? everyone end - def show? - @user.internal_user? + def new? + everyone end - [:clone?, :destroy?, :edit?, :update?].each do |action| + [:show? ,:destroy?, :edit?, :update?].each do |action| define_method(action) { admin? || author?} end - [:reload?].each do |action| - define_method(action) { everyone } - end - - class Scope < Scope - def resolve - if @user.admin? - @scope.all - elsif @user.internal_user? - @scope.where('user_id = ? OR public = TRUE', @user.id) - else - @scope.none - end - end - end end