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: unicode, validates_uniqueness_of
April 2nd, 2009 at 4:26 pm
我没遇到,因为我不让他们用中文login……这到真是个问题
April 29th, 2009 at 1:52 pm
还真没注意过这问题 ……
May 17th, 2009 at 7:13 am
测试后,是可以使用中文的