Im having troubles with awesome Globalize3 gem. For now I`m having two languages :en and :ru. And :ru falls back to :en like this
#/config/initializers/globalize.rb
Globalize.fallbacks = {:ru => [:ru, :en]}
In my controller I am trying to sort the whole collection of translated records either by name translations or by translations fallback values. But with_translations()
does not seem to give me such opportunity!
Country.with_translations(:ru).order('country_translations.name ASC')
#this filters out those who have no :ru translations (BUT THEY SHOLD USE FALLBACKS!)
so to retrieve all records i can pass an array of locales:
Country.with_translations([:ru, :en]).order('country_translations.name ASC')
#but this completely ruins the sorting order (DAMN NOTHING IS SORTED)
and the only simple thing i want is to get fallbacks and sorting all togather! So we need somehow get all records only sorted by available name value.
Is there any way?
Would have left this as a comment, but don't have the reputation yet, so figured I might as well leave this as an answer.
In Rails 4, that query as it is currently written throws a long deprecation warning about implicit joins (which is what you're doing by referencing the
model_translations
table in the where cause).I believe you are trying return
Model
records, notModel::Translation
records. As such, I think you can swap theincludes
for ajoin
, which should be more performant and gets rid of the deprecation warning.In my Rails 4 app, the join worked perfectly, but I haven't tested it in Rails 3.
Solved this by digging into Globalize3 source. It uses
with_locales
scope to get records that have proper locales present. I just needed them all:Hope it will help someone!