Module: ActiveVersion::Translations::HasTranslations::ClassMethods
- Defined in:
- lib/active_version/translations/has_translations.rb
Instance Method Summary collapse
-
#scope_for_translated_attribute(attribute_name, value, locale: I18n.locale) ⇒ Object
Scope for translated attribute.
-
#translated_copies(*attribute_names) ⇒ Object
Auto-generate copy methods for translated attributes.
-
#translated_scopes(*attribute_names) ⇒ Object
Auto-generate scopes for translated attributes.
Instance Method Details
#scope_for_translated_attribute(attribute_name, value, locale: I18n.locale) ⇒ Object
Scope for translated attribute
131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# File 'lib/active_version/translations/has_translations.rb', line 131 def scope_for_translated_attribute(attribute_name, value, locale: I18n.locale) foreign_key = if translation_class.respond_to?(:source_foreign_key) translation_class.source_foreign_key else "#{name.underscore}_id" end identity_columns = Array(foreign_key).map(&:to_s) scope = translation_class.where(locale: locale).where(attribute_name => value) if identity_columns.one? ids = scope.select(identity_columns.first) where(id: ids) else ids = scope.pluck(*identity_columns) where(primary_key => ids) end end |
#translated_copies(*attribute_names) ⇒ Object
Auto-generate copy methods for translated attributes
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 |
# File 'lib/active_version/translations/has_translations.rb', line 164 def translated_copies(*attribute_names) define_method(:copy_values_from_translation) do attribute_names.each do |attribute_name| if respond_to?(:will_save_change_to_attribute?) && will_save_change_to_attribute?(attribute_name) next end if respond_to?(:attribute_changed?) && attribute_changed?(attribute_name) next end next if self[attribute_name].present? value = translate(attribute_name, locale: I18n.default_locale).presence value ||= translations.first&.send(attribute_name) self[attribute_name] = value if value.present? end end end |
#translated_scopes(*attribute_names) ⇒ Object
Auto-generate scopes for translated attributes
150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/active_version/translations/has_translations.rb', line 150 def translated_scopes(*attribute_names) attribute_names.each do |attribute_name| define_singleton_method(:"for_translated_#{attribute_name}") do |value, locale: I18n.locale| scope_for_translated_attribute(attribute_name, value, locale: locale) end define_singleton_method(:"find_by_translated_#{attribute_name}") do |value, locale: I18n.locale| scope_for_translated_attribute(attribute_name, value, locale: locale) .first || find_by(attribute_name => value) end end end |