如何验证提交ActiveRecord的单个属性而不是其所有属性?

时间:2011-03-20 08:39:56

标签: ruby-on-rails ruby ruby-on-rails-3 validation activerecord

我正在使用Ruby on Rails 3,我想为提交ActiveRecord而不是其所有属性验证单个属性。

例如,在我的模型中,我有:

validates :firstname, :presence => true, ...
validates :lastname,  :presence => true, ...

我想:firstname:lastname单独上运行验证。 有可能吗?如果是这样,我该如何做到?


P.S。:我知道出于验证目的,有一些方法,如“validates_presence_of”,“validates_confirmation_of”,......,但我只想使用上面的代码。

3 个答案:

答案 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。

执行验证

此致

罗宾