diff --git a/app/models/questionnaire.rb b/app/models/questionnaire.rb index d576bc421..e11b081ed 100644 --- a/app/models/questionnaire.rb +++ b/app/models/questionnaire.rb @@ -2,20 +2,36 @@ class Questionnaire < ApplicationRecord belongs_to :assignment, foreign_key: 'assignment_id', inverse_of: false belongs_to :instructor has_many :questions, dependent: :destroy # the collection of questions associated with this Questionnaire - before_destroy :check_for_question_associations + before_destroy :prevent_destroy_if_questions_exist + has_many :assignment_questionnaires, dependent: :destroy + has_many :assignments, through: :assignment_questionnaires validate :validate_questionnaire validates :name, presence: true validates :max_question_score, :min_question_score, numericality: true + # Does this questionnaire contain true/false questions? + def true_false_questions? + questions.where(type: 'Checkbox').exists? + end + + def delete + assignments.each do |assignment| + raise "The assignment #{assignment.name} uses this questionnaire. + Do you want to delete the assignment?" + end + questions.each(&:delete) + destroy + end + # clones the contents of a questionnaire, including the questions and associated advice - def self.copy_questionnaire_details(params) + def self.copy(params) orig_questionnaire = Questionnaire.find(params[:id]) questions = Question.where(questionnaire_id: params[:id]) questionnaire = orig_questionnaire.dup questionnaire.name = 'Copy of ' + orig_questionnaire.name - questionnaire.created_at = Time.zone.now - questionnaire.updated_at = Time.zone.now + questionnaire.created_at = Time.now + questionnaire.updated_at = Time.now questionnaire.save! questions.each do |question| new_question = question.dup @@ -34,8 +50,8 @@ def validate_questionnaire errors.add(:name, 'Questionnaire names must be unique.') if results.present? end - # Check_for_question_associations checks if questionnaire has associated questions or not - def check_for_question_associations + # Checks if questionnaire has associated questions or not + def prevent_destroy_if_questions_exist if questions.any? raise ActiveRecord::DeleteRestrictionError.new(:base, "Cannot delete record because dependent questions exist") end