Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 基于其i18n翻译的排序列表_Ruby On Rails_Sorting_Internationalization - Fatal编程技术网

Ruby on rails 基于其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 %>

假设我在数据库中有一个项目列表,在i18n文件中有它们各自的翻译

i18n文件:

  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")