我有类似的东西:
class User
include DataMapper::Resource
property :id, Serial
property :username, Text
end
我希望用户名区分大小写,因此用户可以根据自己的选择创建用户名。那么以不区分大小写的方式搜索用户名的最佳方法是什么?
如果我创建一个名为'TestUser'的用户,我希望能够通过类似
的方式访问它User.first(:username => 'testuser')
我考虑过创建一个username_downcased属性,该属性使用validates_with_method来生成用于索引的用户名属性的下层版本,但是我在使用它时遇到了问题。
答案 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上完成。