繁体   English   中英

通过翻译的属性全球化3个订单记录并考虑回退

[英]Globalize3 order records by translated attributes and taking fallbacks into consideration

我有令人敬畏的Globalize3宝石的麻烦。 现在我有两种语言:en和:ru。 并且:ru回归:恩喜欢这个

#/config/initializers/globalize.rb
Globalize.fallbacks = {:ru => [:ru, :en]}

在我的控制器中,我试图通过名称翻译或翻译后备值对翻译记录的整个集合进行排序。 但是with_translations()似乎没有给我这样的机会!

Country.with_translations(:ru).order('country_translations.name ASC')
#this filters out those who have no :ru translations (BUT THEY SHOLD USE FALLBACKS!)

所以要检索我可以传递一系列语言环境的所有记录:

Country.with_translations([:ru, :en]).order('country_translations.name ASC')
#but this completely ruins the sorting order (DAMN NOTHING IS SORTED)

而我想要的唯一简单的事情是获得后备并整理所有东西! 所以我们需要以某种方式获取所有记录,只按可用的名称值排序。

有什么办法吗?

通过挖掘Globalize3源解决了这个问题。 它使用with_locales作用域来获取具有适当语言环境的记录。 我只需要它们:

Model.includes(:translations).
       with_locales(I18n.available_locales).
       order('model_translations.name ASC')

希望它会帮助别人!

本来可以留下这个评论,但还没有声誉,所以我想不妨留下这个答案。

  1. 在Rails 4中,当前编写的查询会抛出一个关于隐式连接的长时间弃用警告(这是您通过引用where cause中的model_translations表而执行的操作)。

  2. 我相信你正在尝试返回Model记录,而不是Model::Translation记录。 因此,我认为您可以交换includes join ,这应该更高效,并摆脱弃用警告。

在我的Rails 4应用程序中,联接工作完美,但我还没有在Rails 3中测试过。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM