2013-04-16 4 views
4

멋진 Globalize3 gem에 문제가 있습니다. 현재 저는 en과 ru라는 두 가지 언어를 사용하고 있습니다. 그리고 : 나는 이름을 번역하거나 번역이 값을 폴백 (fallback)에 의해 하나 번역 레코드의 전체 집합을 정렬하는 데 노력하고 내 컨트롤러에서이번역 된 속성별로 Globalize3 주문 레코드 및 고려 대상으로 대체

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

처럼 엉 : RU는 다시 떨어진다. 그러나 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) 

과 내가 원하는 유일한 간단한 일이 폴백 (fallback) 모든 togather입니다 정렬을 얻을하는 것입니다! 그래서 우리는 어떻게 든 모든 레코드를 사용할 수있는 이름 값으로 정렬되도록해야합니다.

어떨까요?

답변

17

Globalize3 소스를 파헤 치면 해결됩니다. 적절한 로케일이있는 레코드를 얻으려면 with_locales 범위를 사용합니다. 방금 그 (것)들을 모두 필요로했습니다 :

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

누군가가 도움이되기를 바랍니다!

3

댓글로 남겨 두었으나 명성이 아직 없으므로 답변으로 남겨 둘 수 있습니다. 암시 적 조인에 대해 레일 4에서

  1. 는, 그것이 현재 기록 된대로 해당 쿼리는 (당신이 어디에 원인에 model_translations 테이블을 참조하여 무슨 일을하는지입니다) 긴 중단 경고가 발생합니다.

  2. Model::Translation 레코드가 아닌 Model 레코드를 반환하려고한다고 생각합니다. 따라서 includesjoin으로 바꾸면 성능이 향상되고 사용 중단 경고를 없앨 수 있다고 생각합니다. 내 레일에서

4 응용 프로그램은 완벽하게 일을 조인,하지만 난 레일에 그것을 테스트하지 않은 3