我有一些模型要显示在分页列表(使用 will_paginate)中,按使用 Globalize 翻译的列排序。
要求说必须能够以任何语言创建对象,并且如果当前语言环境没有可用的翻译,则以预定义的顺序回退到任何其他语言。
我遇到的问题是,如果我在翻译表上加入表,并且翻译是混合的,will_paginate 失败,因为即使有不同的调用,#count 计算错误,AR Relation 上的#limit 不会按预期工作。
例如:
我有一个 Exhibitor 模型,它具有来自 Globalize 的相应 Exhibitor::Translation ,并且 Exhibitor 对象可以在任何或所有配置的语言环境中进行翻译。
Exhibitor.with_translations.order(:sort_string).limit(2)
只返回一个对象,因为第一个 Exhibitor 对象有 2 个翻译,即使是 #distinct 调用也不会改变这一点,这意味着 will_paginate 变得混乱并且
我想我想要的是这样的:
SELECT exhibitors.id,translations.sort_string
FROM exhibitors
INNER JOIN
exhibitor_translations translations ON translations.exhibitor_id =
exhibitors.id
WHERE translations.locale = 'en' OR translations.locale = 'de' OR
translations.locale = 'fr'
ORDER BY translations.sort_string;
WHERE 部分是我苦苦挣扎的地方,因为我只想要存在的第一个翻译,但在这里我要找回每个对象的所有可用翻译。
我希望这是一个可以理解的解释,仍然试图在我的脑海中准确地制定它,所以如果需要任何澄清,请询问。
我在这里尝试了这个解决方案的几个变体Globalize3 订单记录,通过翻译属性并考虑回退
但是 will_paginate 仍然显示错误的计数并且不显示导航链接。