`
sean
  • 浏览: 15925 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Gotchas in rails validation

阅读更多
假设我为了让用户输入的数据长度不超过数据库定义的长度,定义了如下validation:
ruby 代码
 
  1. class User < ActiveRecord::Base  
  2.   validates_length_of :name,  :maximum => 50  
  3. end  
上面代码的行为有时却颇为怪异:
ruby 代码
 
  1. ruby script/console  
  2.   
  3. >> u = User.new      
  4. =>  # 
  5. >> u.valid?      
  6. => false      
  7. >> u.errors.full_messages      
  8. =>["Name is too long (maximum is 50 characters)"]      


注意当user对象的name为nil时,输出的错误却是["name is too long (maximum is 50 characters)"],驴唇不对马嘴!但事实确实如此,为什么?原因在于rails的所有validation方法都支持一个可选参数:allow_nil。allow_nil默认为false, 所以当user对象的name属性为nil时,  尽管is nil与is too long是两回事,validates_length_of :name, :maximum => 50 这个验证却不会通过。

当然你可以指定:allow_nil => true, 但问题是有些属性不能为nil, 即是必须的属性,这时就会想到validates_presence_of,我们可以对上面的代码做改进:
ruby 代码
 
  1. class User < ActiveRecord::Base    
  2.   validates_length_of :name:maximum => 50,  :allow_nil => true  
  3.   validates_presence_of :name    
  4. end    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics