Ruby on rails 如何验证提交的ActiveRecord的单个属性而不是其所有属性?
我使用的是RubyonRails3,我想为提交的ActiveRecord验证一个属性,而不是它的所有属性 例如,在我的模型中,我有:Ruby on rails 如何验证提交的ActiveRecord的单个属性而不是其所有属性?,ruby-on-rails,ruby,ruby-on-rails-3,validation,activerecord,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Activerecord,我使用的是RubyonRails3,我想为提交的ActiveRecord验证一个属性,而不是它的所有属性 例如,在我的模型中,我有: validates :firstname, :presence => true, ... validates :lastname, :presence => true, ... 我想分别对:firstname和:lastname进行验证可能吗?如果是这样,我如何才能做到这一点? 注:我知道出于验证目的,有“验证存在性”、“验证确认性”等方法,但我
validates :firstname, :presence => true, ...
validates :lastname, :presence => true, ...
我想分别对:firstname
和:lastname
进行验证可能吗?如果是这样,我如何才能做到这一点?
注:我知道出于验证目的,有“验证存在性”、“验证确认性”等方法,但我只想使用上述代码。您只需删除上面代码的第二行即可,其内容如下:
validates :firstname, :presence => true
然后将不对:lastname执行任何验证
问候
Robin类模型如果attrs.empty?||属性包括?(:名字)
Model.validates:lastname,:presence=>如果attrs.empty?||属性包括?(:姓氏)
...
超级的
终止
终止
m=新型
m、 拯救
#=>错误
m、 save(nil)#与save(false)相同,您可以同时使用它们
#=>正确
m=Model.new:firstname=>“油灰”
m、 拯救
#=>错误
m、 保存(:firstname,:lastname)
#=>错误
m、 保存(:firstname)
#=>正确
您可以在模型上设置虚拟属性,然后根据该属性执行条件验证
你可以在上找到关于这一点的屏幕广播。我想分别验证“:firstname”和(然后)validate“:lastname”,所以我需要第二部分。分别验证“
是什么意思?例如,要保存2个呼叫,还是只保存一个?总体而言,您要做的事情的用例/场景是什么?很好。但是这是否会覆盖ActiveRecord::Validations
中的save(options={})
方法,使save(false)
不再工作?对此不确定,但可能您已经考虑到了?@Zabba,这一点很好,但实际上save(false)
将忽略所有验证,因为attrs
不会为空,也不会有任何名称为false
的列名。但是,是的,这是一个非常粗糙的方法,我们可以简单地重构这个方法:)
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