Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何验证提交的ActiveRecord的单个属性而不是其所有属性?_Ruby On Rails_Ruby_Ruby On Rails 3_Validation_Activerecord - Fatal编程技术网

Ruby on rails 如何验证提交的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进行验证可能吗?如果是这样,我如何才能做到这一点? 注:我知道出于验证目的,有“验证存在性”、“验证确认性”等方法,但我

我使用的是RubyonRails3,我想为提交的ActiveRecord验证一个属性,而不是它的所有属性

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

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