给定我的数据库中的项目列表以及它们在i18n文件中各自的翻译。
i18n文件:
basic_categories:
item_1: Z
item_2: A
item_3: F在视图上:
<% @basic_categories.each do |category| %>
<%= t("basic_categories.#{category.name}") %>
<% end %>如何针对每种语言对此列表进行排序?
发布于 2010-11-09 07:17:21
如果您的列表太长,出于性能原因,您可能希望将翻译放在数据库中。MySQL的排序速度比ruby快。
否则,我认为你可以这样做:
在控制器中,使用ruby构建一个字符串或散列数组:
@basic_categories = categories.collect { |category|
{ :name => I18n.t("basic_categories.#{category.name}"), ... }
}.sort_by { |category| category[:name] }并使用拼音对其进行排序,请参见http://ruby-doc.org/core/classes/Enumerable.html
在你看来很简单:
<% @basic_categories.each do |category| %>
<%= category[:name] %>
...
<% end %>发布于 2018-08-28 17:53:24
您也可以将带有翻译的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")https://stackoverflow.com/questions/4127812
复制相似问题