Ограничить область результатов для переводов только текущей локалью с помощью Mobility

Как ограничить результирующий набор запроса записями, которые имеют перевод для текущей локали (или запасной вариант), оставляя при этом любые записи, которые этого не делают?

Например, учитывая локаль :frЯ только хочу Article.all возвращать только статьи, которые имеют французский перевод. То же самое с :'fr-FR'—Я хочу вернуть любую запись с языковым переводом :'fr-FR' или же :fr, но ничего больше.

Article.joins(:translations).where(article_translations: { locale: [I81n.locale] }) работает для одного места, но как насчет запасных вариантов?

1 ответ

Решение

Существует не бэкэнд-независимый способ сделать это (в настоящее время). Эта проблема будет одним из шагов к ее реализации.

Тем не менее, с таблицей бэкэнд, когда вы звоните join_translationsвы используете внутреннее объединение, поэтому будут объединены только записи с моделью перевода в текущей локали, и любые статьи без переводов в текущей локали не будут возвращены. Так просто Ariticle.i18n.join_translations будет отсеивать любые статьи, которые не имеют переводов в текущей локали, не делая ничего другого.

Однако, это не будет включать запасные варианты в настоящее время. Для этого вам придется либо самостоятельно разобраться в SQL, либо подождать, пока эта функция будет реализована (возможно, не в течение нескольких месяцев).

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