我有一个名为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中订购结果。
答案 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')
这在我的情况下工作正常,因为我知道期望哪些类型。