validates_uniqueness_of 对中文验证无效
Thursday, March 19th, 2009用 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
问题解决了, 但不一定是最好的办法, 有人也遇到同样的问题么?


