0

我有类似的东西:

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, Text
end

我希望用户名区分大小写,以便用户可以根据自己的选择创建用户名。然后以不区分大小写的方式搜索用户名的最佳方法是什么?

如果我创建一个名为“TestUser”的用户,我希望能够通过类似的方式访问它

User.first(:username => 'testuser')

我考虑过创建一个 username_downcased 属性,该属性使用 validates_with_method 来制作用于索引的用户名属性的小写版本,但我在让它工作时遇到了问题。

4

1 回答 1

0

经过一番摸索,我找到了一个解决方案,但如果它是最好的,我会感到非常惊讶。

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, Text
  property :username_lower, Text

  validates_with_method :lower_username
  validates_uniqueness_of :username_lower, :message => 'Username is already taken'

  def lower_username
    self.username_lower = self.username.downcase
    true
  end

end

区分大小写的名称存储在用户名中,但不区分大小写的索引可以在 username_lower 上完成。

于 2012-08-24T17:12:48.563 回答