Ограничить область результатов для переводов только текущей локалью с помощью 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, либо подождать, пока эта функция будет реализована (возможно, не в течение нескольких месяцев).