Сортировать список по переводу i18n - PullRequest
3 голосов
/ 08 ноября 2010

Учитывая, что у меня есть список элементов в моей БД и соответствующий перевод в файле i18n.

Файл i18n:

  basic_categories:  
    item_1: Z
    item_2: A
    item_3: F

в представлении:

      <% @basic_categories.each do |category| %>
        <%= t("basic_categories.#{category.name}") %>
      <% end %>

Как мне отсортировать этот список для каждого языка?

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Также вы можете передать json с переводами в запрос PG, а затем упорядочить по переведенному значению из json:

categories_i18n = I18n.backend.instance_variable_get(:@translations).dig(:en, :basic_categories).to_json
@basic_categories = categories.order("'#{categories_i18n}::json'->>name")
0 голосов
/ 09 ноября 2010

Возможно, вы захотите иметь перевод в вашей базе данных, если ваш список слишком длинный по соображениям производительности.MySQL сортируется быстрее, чем ruby.

В противном случае, я думаю, вы могли бы сделать что-то вроде этого:

В вашем контроллере используйте ruby ​​для создания массива строки или хэша:

@basic_categories = categories.collect { |category|
  { :name => I18n.t("basic_categories.#{category.name}"), ... }
}.sort_by { |category| category[:name] }

И сортируйте его с помощью ruby, см. http://ruby -doc.org / core / classes / Enumerable.html

На ваш взгляд просто:

<% @basic_categories.each do |category| %>
  <%= category[:name] %>
  ...
<% end %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...