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

kar*_*gen 2 ruby postgresql activerecord localization ruby-on-rails

我有一个itemstype列调用的表.此列可以具有以下值之一:

rock
paper
scissor
Run Code Online (Sandbox Code Playgroud)

在我的翻译文件中:

en: 
  rock: Stone
  paper: Wood
  scissor: Weapon
Run Code Online (Sandbox Code Playgroud)

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

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

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

kar*_*gen 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')
Run Code Online (Sandbox Code Playgroud)

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