Как отсортировать набор результатов activerecord в переведенном столбце i18n? - PullRequest
2 голосов
/ 21 мая 2010

У меня есть следующая строка в представлении:

<%= f.select(:province_id, options_from_collection_for_select(Province.find(:all, :conditions => { :country_id => @property.country_id }, :order => "provinces.name ASC"), :id, :name) %>

В модели провинции у меня есть следующее:

  def name
     I18n.t(super)
  end

Проблема в том, что поле: name переведено (через модель провинции) и что упорядочение выполняется с помощью activerecord для английского имени. Неанглийский набор результатов может быть неправильно отсортирован таким образом. У нас есть провинция в Бельгии, которая называется Oost-Vlaanderen. По-английски это «Восточная Фландрия». Не подходит для сортировки:)

Мне нужно что-то подобное, но оно не работает:

<%= f.select(:province_id, options_from_collection_for_select(Province.find(:all, :conditions => { :country_id => @property.country_id }, :order => "provinces.I18n.t(name) ASC"), :id, :name) %>

Каков наилучший подход для решения этой проблемы? Как вы могли заметить, мои знания в области кодирования очень ограничены, извините за это.

1 Ответ

2 голосов
/ 21 мая 2010

Вам нужно отсортировать записи после их загрузки из базы данных. Вероятно, это должно сработать:

Provinces.find(:all, :conditions => {:country_id => @property.country_id}).sort_by{|p| p.name}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...