validates_uniqueness_of 对中文验证无效

用 restful_authutication 遇到一个奇怪的问题, validates_uniqueness_of 对中文验证无效, 搜索一下发现有人报告过, 看上去已经解决了, 但是在 2.2.2 中仍然不行, patch 中修改的是

--- a/activerecord/lib/active_record/validations.rb
+++ b/activerecord/lib/active_record/validations.rb
@@ -664,7 +664,7 @@ module ActiveRecord
             condition_params = [value]
           else
             condition_sql = "LOWER(#{sql_attribute}) #{comparison_operator}"
-            condition_params = [value.downcase]
+            condition_params = [value.chars.downcase]
           end

但是 2.2.2 中看到的代码是 condition_params = [value.mb_chars.downcase]

没仔细研究失效的原因, 自己加了点代码解决:

validates_uniqueness_of   :login,    :if => Proc.new {|user| !user.login.is_utf8?}

当 login 是 utf-8 的时候直接跳过这步, 接下来自己再验证一下:

def validate
  user = User.find(:first, :conditions => ["login=?", self.login])
  if !user || user != self
    self.errors.add :login, "用户名已被注册"
  end
end

问题解决了, 但不一定是最好的办法, 有人也遇到同样的问题么?

Tags: ,

3 Responses to “validates_uniqueness_of 对中文验证无效”

  1. Allen Says:

    我没遇到,因为我不让他们用中文login……这到真是个问题

  2. jinzhu Says:

    还真没注意过这问题 ……

  3. Jinzhu Says:

    测试后,是可以使用中文的

Leave a Reply