class Translation < ActiveRecord::Base belongs_to :phrase validates :phrase, presence: true, unless: :new_record? scope :by_locale, ->(*locale) { where(locale: (locale.nil? || locale.compact.join.empty?) ? I18n.locale : locale) } scope :with_phrase_containers, -> { joins(phrase: :phrase_containers) } scope :for, ->(translatable, attribute_name) do with_phrase_containers.merge(PhraseContainer.for(translatable, attribute_name)) end scope :localed, ->(*locale) do if locale.nil? locale = [I18n.locale.to_s] elsif locale.is_a? Array locale = locale.compact.join.empty? ? [I18n.locale.to_s] : locale.compact.map(&:to_s) else locale = [locale.to_s] end ordered_locales = locale + (locales - locale) order(ordered_locales.map { |l| "`translations`.`locale` = '#{l}' DESC" }.join(', ')) end scope :not_blank, -> { where.not(text: [nil, '']) } end