如何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。

问候

知更鸟