Since targets didn't have a title but only a long description, every form allowing to select targets was pretty much unusable: we either displayed just the code or the whole description. Now, with a concise title, it's easier to find and select the desired target. The titles have been copied from The Global Goals page [1]. Note we're using the `short_title` I18n key for the `title` method and the `long_title` I18n key for the `long_title` method. We can't use `title` as I18n key instead of `short_title` because it would affect existing translations. [1] https://www.globalgoals.org/
33 lines
708 B
Ruby
33 lines
708 B
Ruby
class SDG::LocalTarget < ApplicationRecord
|
|
include SDG::Related
|
|
|
|
translates :title, touch: true
|
|
translates :description, touch: true
|
|
include Globalizable
|
|
|
|
validates_translation :title, presence: true
|
|
validates_translation :description, presence: true
|
|
|
|
validates :code, presence: true, uniqueness: true,
|
|
format: ->(local_target) { /\A#{local_target.target&.code}\.\d+/ }
|
|
validates :target, presence: true
|
|
validates :goal, presence: true
|
|
|
|
belongs_to :target
|
|
belongs_to :goal
|
|
|
|
before_validation :set_related_goal
|
|
|
|
alias_method :long_title, :title
|
|
|
|
def self.[](code)
|
|
find_by!(code: code)
|
|
end
|
|
|
|
private
|
|
|
|
def set_related_goal
|
|
self.goal ||= target&.goal
|
|
end
|
|
end
|