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
|
# File 'lib/translatable/database_strategies/mysql.rb', line 12
def where_translations_scope(model_class, attributes, locales: [], case_sensitive: false)
column_name = model_class.translations_column_name
search_locales = locales.present? ? locales.map(&:to_s) : model_class.translatable_locales.map(&:to_s)
return model_class.none if attributes.blank?
conditions = []
bind_values = []
if case_sensitive
search_locales.each do |locale|
locale_attributes = { locale => attributes }
conditions << "JSON_CONTAINS(#{column_name}, ?)"
bind_values << locale_attributes.to_json
end
else
search_locales.each do |locale|
attributes.each do |field, value|
conditions << "UPPER(JSON_UNQUOTE(JSON_EXTRACT(#{column_name}, ?))) LIKE UPPER(?)"
bind_values += ["$.#{locale}.#{field}", value.to_s]
end
end
end
where_clause = conditions.join(' OR ')
model_class.where(where_clause, *bind_values)
end
|