0

我正在使用 Ruby on Rails。我想将用户名存储到数据库中,当我提取它们时,我希望它们具有与输入时相同的大小写,但我想添加一些不区分大小写的验证,以确保无论如何都不能使用相同的用户名大写。

我这样说是因为并非所有数据库适配器都使用区分大小写的索引,因此我需要在将用户名保存到数据库之前将其小写。

所以模型中的验证是这样的:

uniqueness: { case_sensitive: false }

我该怎么做呢?

4

2 回答 2

1

我想到了几种方法。

简单的

您可以进行区分大小写的模型级别验证,就像您正在做的那样,并且根本验证数据库中的唯一性。

丑陋的

或者,如果您坚持数据库级别的验证,那么一种与数据库无关的脏方法可能是拥有另一个字段,仅用于验证。

add_column :users, :uppercase_username, :string, unique: true

class User
  def username=
    @username = value
    uppercase_username = value.upper
  end
end 

惊人的

您可以定义自己的索引函数(可能是特定于数据库的)。

于 2013-10-28T23:58:05.500 回答
-1

您提到的验证 ( uniqueness: { case_sensitive: false }) 不会在存储用户名时更改用户名的大小写,而是会简单地检查是否存在相同的电子邮件。本质上,鉴于您当前的验证,您不必担心这个问题。

于 2013-10-28T23:39:30.707 回答