DataMapper不区分大小写的唯一验证

时间:2014-01-03 07:12:33

标签: ruby sinatra datamapper

我有类似的东西:

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, String, :unique => true
end

post '/signup' do
  user = User.create(username: params['username'])
  if user.save
    puts "New user was created"
  else
    puts user.errors
  end
end

参数:unique => true区分大小写。它不会阻止使用用户名“admin”和“Admin”创建用户。如何验证不区分大小写的用户名唯一,并使用已下载的用户名属性,以便用户可以选择用户名。

1 个答案:

答案 0 :(得分:1)

您可以提供自己的custom validation

class User
  include DataMapper::Resource

  property :id, Serial
  property :username, String

  validates_with_method :username,
                        :method => :case_insensitive_unique_username

  def case_insensitive_unique_username
    User.first(conditions: ["username ILIKE ?", self.username]).nil?
  end
end

请注意,ILIKE仅适用于PostgreSQL,您必须了解如何使用您的特定适配器不敏感地查找记录。