假设我在数据库中有一个项目列表及其对应的翻译文件。
国际化文件:
basic_categories:
item_1: Z
item_2: A
item_3: F
关于视图:
<% @basic_categories.each do |category| %>
<%= t("basic_categories.#{category.name}") %>
<% end %>
我该如何为每种语言对这个列表进行排序?
假设我在数据库中有一个项目列表及其对应的翻译文件。
国际化文件:
basic_categories:
item_1: Z
item_2: A
item_3: F
关于视图:
<% @basic_categories.each do |category| %>
<%= t("basic_categories.#{category.name}") %>
<% end %>
如果您的列表过长,出于性能考虑,您可能希望将翻译存储在数据库中。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 %>
此外,您可以将带有翻译的 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")