Рельсы 4 - порядок перевода / локализованное значение


У меня есть таблица под названием items со столбцом type. Этот столбец может иметь одно из следующих значений:

rock
paper
scissor

Внутри моего файла перевода:

en: 
  rock: Stone
  paper: Wood
  scissor: Weapon

Как я могу получить результаты и упорядочить их по переведенному значению с помощью ActiveRecord?

Очевидно, что если я сделаю Item.where(something: true).order('name asc'), то получу результаты, упорядоченные по значению внутри базы данных (rock), а не по переведенному значению (Stone).

Мне известны некоторые методы ruby, такие как sort_by и sort для заказа предметов с ruby, но я хотел бы заказать результаты в ActiveRecord по соображениям производительности.

1   2   2015-07-26 00:36:00

1 ответ:

Мне удалось решить эту проблему с помощью оператора 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')

Это прекрасно работает в моем случае, так как я знаю, какие типы ожидать.