4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
# File 'lib/ext/active_record_ext.rb', line 4
def has_translations *fields
unless @__rdbl_translations
@__rdbl_translations = true
self.has_many :translations, as: :resource, dependent: :destroy
end
fields.each do |field|
RailsDbLocalize::add_to_schema(self, field)
self.has_many :"#{field}_translations", -> { where(field: field) }, as: :resource
self.class_eval <<-CODE, __FILE__, __LINE__ + 1
def #{field}_translated (lang=nil)
lang ||= I18n.locale
RailsDbLocalize::TranslationCache.instance.get_translation_for(self.class, self.id, "#{field}", lang, self.#{field} )
end
def #{field}_translated= args
if args.is_a?(Array)
value, lang = args
else
value = args
lang = I18n.locale
end
if self.id
translated = RailsDbLocalize::Translation.where(
resource_type: self.class.to_s, resource_id: self.id, field: "#{field}", lang: lang
).first_or_create
translated.content = value
translated.save!
else
translations.build field: "#{field}", lang: lang, content: value
end
end
CODE
end
end
|