正确的字母顺序 - 全平台解决方案

问题描述 投票:0回答:1

目前在我们的应用程序中,我们不会覆盖系统按字母顺序排列数据的默认方法,它会按大写字母排序。

如何在不更改排序规则的情况下在整个应用程序中启用不区分大小写?

数据库:PostgreSQL

对此有什么想法吗?

ruby-on-rails ruby postgresql
1个回答
0
投票

一个快速而肮脏的解决方法可能是将这样的范围添加到您的

ApplicationRecord

scope :order_ci, ->(attribute) { order("LOWER(#{attribute})") }

或者像这样使用特定的整理:

scope :order_ci, ->(attribute) { order("#{attribute} COLLATE en_US.UTF-8") }

然后像这样使用该范围

Foo.order_ci(:name)
而不是
Foo.order(:name)

但请记住,这个“解决方案”有很多缺陷:Ruby on Rails 附带的

order
方法接受多种数据类型和格式(单值、哈希、字符串、列表),并且不仅接受一个属性,而且还接受许多属性。同时。 Rails 方法正确地清理了输入,而此方法则不然。

这意味着,当您想要使用这样的解决方法而不是修复数据库的排序规则时。然后,您需要确保您的重写方法基本上能够处理所有数据格式,并像 Ruby on Rails 方法那样进行适当的清理。否则,在最好的情况下,您将面临错误的风险,在最坏的情况下,您将面临安全漏洞的风险。

© www.soinside.com 2019 - 2024. All rights reserved.