kar*_*gen 2 ruby postgresql activerecord localization ruby-on-rails
我有一个items用type列调用的表.此列可以具有以下值之一:
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)的结果.
我知道一些ruby方法,比如sort_by和sort订购带有ruby的项目,但我想在性能原因下在ActiveRecord中订购结果.
我设法通过使用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)
这在我的情况下工作正常,因为我知道期望哪些类型.
| 归档时间: |
|
| 查看次数: |
160 次 |
| 最近记录: |