如何将查询的结果集限制为具有当前语言环境(或回退)翻译的记录,同时忽略任何没有的记录?
例如,给定一个语言环境:fr
,我只想Article.all
返回有法语翻译的文章。与:'fr-FR'
- 我想返回任何翻译语言环境为:'fr-FR'
or的记录:fr
的记录,但没有其他记录。
Article.joins(:translations).where(article_translations: { locale: [I81n.locale] })
适用于单个位置,但是后备呢?
如何将查询的结果集限制为具有当前语言环境(或回退)翻译的记录,同时忽略任何没有的记录?
例如,给定一个语言环境:fr
,我只想Article.all
返回有法语翻译的文章。与:'fr-FR'
- 我想返回任何翻译语言环境为:'fr-FR'
or的记录:fr
的记录,但没有其他记录。
Article.joins(:translations).where(article_translations: { locale: [I81n.locale] })
适用于单个位置,但是后备呢?
(目前)没有与后端无关的方法来做到这一点。这个问题将是实现它的一步。
但是,使用表后端,当您调用 时join_translations
,您使用的是内部连接,因此只会连接当前语言环境中具有翻译模型的记录,并且不会返回当前语言环境中没有任何翻译的任何文章。因此,只需Ariticle.i18n.join_translations
清除在当前语言环境中没有翻译的任何文章,而不做任何其他事情。
但是,这目前不包括后备。为此,您必须自己弄清楚 SQL,或者等到该功能实现(可能至少几个月后)。