Ruby on rails 基于其i18n翻译的排序列表
假设我在数据库中有一个项目列表,在i18n文件中有它们各自的翻译 i18n文件:Ruby on rails 基于其i18n翻译的排序列表,ruby-on-rails,sorting,internationalization,Ruby On Rails,Sorting,Internationalization,假设我在数据库中有一个项目列表,在i18n文件中有它们各自的翻译 i18n文件: 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对其进行排序,参见
在你看来,简单地说:
<% @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")