区分大小写的属性的不区分大小写的索引

时间:2012-08-21 21:54:10

标签: ruby datamapper

我有类似的东西:

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, Text
end

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

如果我创建一个名为'TestUser'的用户,我希望能够通过类似

的方式访问它
User.first(:username => 'testuser')

我考虑过创建一个username_downcased属性,该属性使用validates_with_method来生成用于索引的用户名属性的下层版本,但是我在使用它时遇到了问题。

1 个答案:

答案 0 :(得分: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上完成。