Rails 4 - 按翻译/本地化的顺序排序

时间:2015-07-25 21:36:00

标签: ruby-on-rails ruby postgresql activerecord localization

我有一个名为items的表格,其中包含type列。 此列可以具有以下值之一:

rock
paper
scissor

在我的翻译文件中:

en: 
  rock: Stone
  paper: Wood
  scissor: Weapon

如何使用ActiveRecord获取结果并按翻译后的值对其进行排序?

显然,如果我Item.where(something: true).order('name asc'),我会得到数据库中的值(rock)排序的结果,而不是翻译的值(Stone)。

我知道一些r​​uby方法,例如sort_bysort来订购带有ruby的项目,但我想出于性能原因在ActiveRecord中订购结果。

1 个答案:

答案 0 :(得分:5)

我设法使用CASE语句解决了这个问题。

Item.select("*,
  CASE 
    WHEN type = 'rock' THEN '#{I18n.t(:rock)}' 
    WHEN type = 'paper' THEN '#{I18n.t(:paper)}' 
    WHEN type = 'scissor' THEN '#{I18n.t(:scissor)}'
  END AS translated_type
")
.where(something: true)
.order('translated_type asc')

这在我的情况下工作正常,因为我知道期望哪些类型。