这是我正在使用的模型之一
class WorkPost < ActiveRecord::Base
default_scope -> { order(:label) }
end
现在,排序将呈现类似
的内容WorkPost.pluck(:label)
=> ["Chanteur", "Vétérinaire", "responsable du recrutement", "Économiste"]
但是,我希望按字母顺序考虑“É”并且不区分大小写。因此要返回类似的内容:
WorkPost.pluck(:label)
=> ["Chanteur", "Économiste", "responsable du recrutement", "Vétérinaire"]
我希望这可以在ActiveRecord级别完成,以获得良好的性能。
答案 0 :(得分:3)
您可以通过小写标签更改默认范围:
default_scope order: 'lower(label)'
或者您可以使用大写字母:
default_scope order: 'upper(label)'
希望这会有所帮助
答案 1 :(得分:1)
为了解决案例问题,我们可以使用LHH https://stackoverflow.com/a/22376515/1839692的解决方案。
无论如何解决口音问题,我们都可以使用PostgreSQL扩展unaccent模块。
要安装它:
class AddUnaccentToPostgres < ActiveRecord::Migration[5.2]
def change
enable_extension "unaccent"
end
end
对表进行排序(不带重音(也没有大写)):
default_scope order: 'lower(unaccent(label))'