如果一个模型在model_name.rb文件中有验证,我如何手动访问这些验证?我想烹制自己的表单验证系统,使其与内置的Rails技巧一起工作,并尽可能地保持DRY。我的主要问题是,在任何表单值进入数据库之前,我需要进行服务器端验证(我正在使用多步表单)。
基本上,我想知道是否有像
User.validations.each do |v|
puts v.constraint.to_s + " " + v.message
end
有类似的东西吗?
提前谢谢。
如果一个模型在model_name.rb文件中有验证,我如何手动访问这些验证?我想烹制自己的表单验证系统,使其与内置的Rails技巧一起工作,并尽可能地保持DRY。我的主要问题是,在任何表单值进入数据库之前,我需要进行服务器端验证(我正在使用多步表单)。
基本上,我想知道是否有像
User.validations.each do |v|
puts v.constraint.to_s + " " + v.message
end
有类似的东西吗?
提前谢谢。
false
传递给save
方法来抑制验证)。valid?
/invalid?
方法,在任何时候询问模型是否有效。在调用valid?方法后,ActiveRecord对象会暴露出errors方法,该方法会告诉你哪些验证被违反了。你可以检查valid?,然后检查你所在表单部分的任何字段是否无效。 对于具有field1和field2字段的表单,你可以这样做。
unless x.valid?
[:field1,:field2].each do |field|
yes_there_was_an_error if x.errors[field]
end
end
你最好使用状态机,并在表单的各个步骤之间将数据存储在数据库中。
你可以这样做:validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }
,其中signup_step
是数据库中的一个整数列。
因此,即使你说你不想在表单之间将数据存储在数据库中,我认为你也应该这样做。如果你这样做,你就可以使用常规验证和模型,而无需进行恶意黑客攻击。而且,老实说,我不认为以这种方式处理会有问题。