Глобализировать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')

Надеюсь, это поможет кому-то!

Оставил бы это в качестве комментария, но пока не имел репутации, так что решил, что я мог бы также оставить это как ответ.

  1. В Rails 4 этот запрос в том виде, в котором он написан в настоящий момент, выдает длинное предупреждение об устаревших неявных объединениях (что вы и делаете, ссылаясь на model_translations таблица в где причина).

  2. Я верю, что вы пытаетесь вернуться Model записи, а не Model::Translation записей. Таким образом, я думаю, что вы можете поменять местами includes для join, который должен быть более производительным и избавляется от предупреждения об устаревании.

В моем приложении на Rails 4 соединение работало отлично, но я не тестировал его в Rails 3.

Другие вопросы по тегам