Глобализировать3 записи заказов по переведенным атрибутам и принимая во внимание запасные варианты
У меня проблемы с удивительным драгоценным камнем Globalize3. Сейчас у меня два языка:en и:ru. И: ru возвращается к: EN, как это
#/config/initializers/globalize.rb
Globalize.fallbacks = {:ru => [:ru, :en]}
В моем контроллере я пытаюсь отсортировать всю коллекцию переведенных записей либо по переводу имен, либо по резервным значениям переводов. Но with_translations()
похоже, не дает мне такой возможности!
Country.with_translations(:ru).order('country_translations.name ASC')
#this filters out those who have no :ru translations (BUT THEY SHOLD USE FALLBACKS!)
поэтому, чтобы получить все записи, я могу передать массив локалей:
Country.with_translations([:ru, :en]).order('country_translations.name ASC')
#but this completely ruins the sorting order (DAMN NOTHING IS SORTED)
и единственная простая вещь, которую я хочу, - это получить запасные варианты и отсортировать все вместе! Поэтому нам нужно как-то получить все записи, отсортированные только по доступному значению имени.
Там в любом случае?
2 ответа
Решил это, покопавшись в источнике Globalize3. Оно использует with_locales
область, чтобы получить записи, которые имеют надлежащие локали. Я просто нуждался в них всех:
Model.includes(:translations).
with_locales(I18n.available_locales).
order('model_translations.name ASC')
Надеюсь, это поможет кому-то!
Оставил бы это в качестве комментария, но пока не имел репутации, так что решил, что я мог бы также оставить это как ответ.
В Rails 4 этот запрос в том виде, в котором он написан в настоящий момент, выдает длинное предупреждение об устаревших неявных объединениях (что вы и делаете, ссылаясь на
model_translations
таблица в где причина).Я верю, что вы пытаетесь вернуться
Model
записи, а неModel::Translation
записей. Таким образом, я думаю, что вы можете поменять местамиincludes
дляjoin
, который должен быть более производительным и избавляется от предупреждения об устаревании.
В моем приложении на Rails 4 соединение работало отлично, но я не тестировал его в Rails 3.