38 lines
788 B
Ruby
38 lines
788 B
Ruby
class SDG::Goal < ApplicationRecord
|
|
include Comparable
|
|
include SDG::Related
|
|
|
|
validates :code, presence: true, uniqueness: true, inclusion: { in: 1..17 }
|
|
|
|
has_many :targets, dependent: :destroy
|
|
has_many :local_targets, dependent: :destroy
|
|
|
|
def title
|
|
I18n.t("sdg.goals.goal_#{code}.title")
|
|
end
|
|
|
|
def title_in_two_lines
|
|
I18n.t("sdg.goals.goal_#{code}.title_in_two_lines")
|
|
end
|
|
|
|
def description
|
|
I18n.t("sdg.goals.goal_#{code}.description")
|
|
end
|
|
|
|
def <=>(goal_or_target)
|
|
if goal_or_target.class == self.class
|
|
code <=> goal_or_target.code
|
|
elsif goal_or_target.respond_to?(:goal)
|
|
[self, -1] <=> [goal_or_target.goal, 1]
|
|
end
|
|
end
|
|
|
|
def self.[](code)
|
|
find_by!(code: code)
|
|
end
|
|
|
|
def code_and_title
|
|
"#{code}. #{title}"
|
|
end
|
|
end
|