25 lines
755 B
Ruby
25 lines
755 B
Ruby
# frozen_string_literal: true
|
|
|
|
class ExerciseTip < ApplicationRecord
|
|
belongs_to :exercise
|
|
belongs_to :tip
|
|
belongs_to :parent_exercise_tip, class_name: 'ExerciseTip', optional: true
|
|
attr_accessor :children
|
|
|
|
# Ensure no parent tip is set if current tip has rank == 1
|
|
validates :rank, exclusion: {in: [1]}, if: :parent_exercise_tip_id?
|
|
|
|
validate :tip_chain?, if: :parent_exercise_tip_id?
|
|
|
|
def tip_chain?
|
|
# Ensure each referenced parent exercise tip is set for this exercise
|
|
unless ExerciseTip.exists?(
|
|
exercise: exercise, id: parent_exercise_tip
|
|
)
|
|
errors.add :parent_exercise_tip,
|
|
I18n.t('activerecord.errors.messages.together',
|
|
attribute: I18n.t('activerecord.attributes.exercise_tip.tip'))
|
|
end
|
|
end
|
|
end
|