2013-04-16 33 views
4

我有令人敬畏的Globalize3寶石麻煩。現在我有兩種語言:en和:ru。和:RU回落到:恩這樣通過翻譯屬性全球化3個訂單記錄,並考慮回退

#/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) 

,唯一的簡單的事情,我想是讓回退和所有togather排序!所以我們需要以某種方式獲取所有隻按可用名稱值排序的記錄。

有什麼辦法嗎?

回答

17

通過挖掘Globalize3來解決這個問題。它使用with_locales範圍來獲取具有正確語言環境的記錄。我只需要它們全部:

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

希望它能幫助別人!

3

本來會留下這個評論,但是還沒有聲望,所以我認爲我不妨留下這個答案。

  1. 在Rails 4,因爲它是目前正在編寫的查詢拋出一個長期棄用警告有關隱式連接(這是你在這裏的原因引用model_translations表做什麼)。

  2. 我相信你正在嘗試返回Model記錄,而不是Model::Translation記錄。因此,我認爲您可以將includes替換爲join,這應該更具性能,並且可以擺脫棄用警告。

在我的Rails應用4,連接完美地工作,但我還沒有在Rails的測試,它3.