如何validation提交ActiveRecord的单个属性而不是其所有属性?
我正在使用Ruby on Rails 3,我想为提交ActiveRecord而不是其所有属性validation单个属性。
例如,在我的模型中,我有:
validates :firstname, :presence => true, ... validates :lastname, :presence => true, ...
我想分别在:firstname
和:lastname
上运行validation 。 可能吗? 如果是这样,我该怎么做?
PS:我知道出于validation目的,有一些方法,如“validates_presence_of”,“validates_confirmation_of”,……,但我只想使用上面的代码。
您可以在模型上设置虚拟属性,然后根据该属性执行条件validation。
您可以在http://railscasts.com/episodes/41-conditional-validations找到有关此内容的截屏video
class Model < ActiveRecord::Base def save(*attrs) Model.validates :firstname, :presence => true if attrs.empty? || attrs.include?( :firstname ) Model.validates :lastname, :presence => true if attrs.empty? || attrs.include?( :lastname ) ... super end end m = Model.new m.save #=> false m.save(nil) # same as save(false), you can use both of them #=> true m = Model.new :firstname => "Putty" m.save #=> false m.save(:firstname, :lastname) #=> false m.save(:firstname) #=> true
您可以删除上面代码的第二行,如下所示:
validates :firstname, :presence => true
然后不会对:lastname执行validation。
问候
知更鸟