# == Schema Information # # Table name: annotations # # id :integer not null, primary key # question_id :integer # org_id :integer # text :text # type :integer default("0"), not null # created_at :datetime # updated_at :datetime # versionable_id :string(36) # # Indexes # # annotations_org_id_idx (org_id) # annotations_question_id_idx (question_id) # index_annotations_on_versionable_id (versionable_id) # class Annotation < ActiveRecord::Base include ValidationMessages include VersionableModel ## # I liked type as the name for the enum so overriding inheritance column self.inheritance_column = nil enum type: [ :example_answer, :guidance] # ================ # = Associations = # ================ belongs_to :org belongs_to :question has_one :section, through: :question has_one :phase, through: :question has_one :template, through: :question # =============== # = Validations = # =============== validates :text, presence: { message: PRESENCE_MESSAGE } validates :org, presence: { message: PRESENCE_MESSAGE } validates :question, presence: { message: PRESENCE_MESSAGE } validates :type, presence: { message: PRESENCE_MESSAGE }, uniqueness: { message: UNIQUENESS_MESSAGE, scope: [:question_id, :org_id] } # ================= # = Class Methods = # ================= # Deep copy the given annotation and all it's associations # # annotation - To be deep copied # # Returns Annotation def self.deep_copy(annotation) annotation_copy = annotation.dup annotation_copy.save! return annotation_copy end # =========================== # = Public instance methods = # =========================== # The text from the annotation # # Returns String def to_s "#{text}" end def deep_copy(**options) copy = self.dup copy.question_id = options.fetch(:question_id, nil) return copy end end