我正在使用Ruby on Rails 3,我想为提交ActiveRecord而不是其所有属性验证单个属性。
例如,在我的模型中,我有:
validates :firstname, :presence => true, ...
validates :lastname, :presence => true, ...
我想在:firstname
和:lastname
单独上运行验证。 有可能吗?如果是这样,我该如何做到?
P.S。:我知道出于验证目的,有一些方法,如“validates_presence_of”,“validates_confirmation_of”,......,但我只想使用上面的代码。
答案 0 :(得分:1)
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
答案 1 :(得分:1)
您可以在模型上设置虚拟属性,然后根据该属性进行条件验证。
您可以在http://railscasts.com/episodes/41-conditional-validations
找到有关此内容的截屏视频答案 2 :(得分:-3)
您可以删除上面代码的第二行,如下所示:
validates :firstname, :presence => true
然后不会对:lastname。
执行验证此致
罗宾