仅使用 Mobility 将翻译的结果范围限制为当前语言环境

Limit results scope for translations to current locale only with Mobility

如何将查询的结果集限制为具有当前区域设置(或后备)翻译的记录,同时忽略任何没有的记录?

例如,给定区域设置 :fr,我只想要 Article.all 到 return 只有 篇有法语翻译的文章。与 :'fr-FR' 相同——我想 return 任何翻译区域设置为 :'fr-FR':fr 的记录,但别无其他。

Article.joins(:translations).where(article_translations: { locale: [I81n.locale] }) 适用于单个位置,但备用位置呢?

没有后端不可知的方法来做到这一点(目前)。 This issue 将是实现它的第一步。

但是,对于 table 后端,当您调用 join_translations 时,您使用的是内部联接,因此只有在当前语言环境中具有翻译模型的记录才会被联接,任何articles without 将不会返回当前语言环境中的任何翻译。所以 Ariticle.i18n.join_translations 将清除所有在当前语言环境中没有翻译的文章,而不做任何其他事情。

但是,这目前不包括回退。为此,您必须自己弄清楚 SQL,或者等到该功能实现(可能至少几个月内不会)。