如果模型在model_name.rb文件中有验证,我该如何手动访问这些验证?我想制作自己的表格验证系统,它可以与内置的Rails技巧一起工作,我希望尽可能保持干净。我的主要问题是我需要在任何表单值到达数据库之前进行服务器端验证(我使用的是多步骤表单)。
基本上我想知道是否有类似
的方法User.validations.each do |v|
puts v.constraint.to_s + " " + v.message
end
有什么类似的吗?
提前致谢。
答案 0 :(得分:1)
我的主要问题是我需要制作 服务器端验证之前的任何一个 表单值打到了数据库(我是 使用多步形式。)
如果您的模型根据其类文件中的验证无效,则其数据将不会保存到数据库中(除非您将false
传递给save
方法以禁止验证)
valid?
/ invalid?
方法,在任何时候询问模型是否有效。答案 1 :(得分:0)
ActiveRecord对象在有效后公开errors方法?被调用,它为您提供有关违反哪些验证的消息。你可以检查有效吗?然后检查您所在表单部分的任何字段是否无效。 对于包含字段field1和field2的表单,你可以这样做。
unless x.valid?
[:field1,:field2].each do |field|
yes_there_was_an_error if x.errors[field]
end
end
答案 2 :(得分:0)
您最好的选择是使用状态机并将数据存储在表单中各个步骤之间的数据库中。
你可以做到,例如validates_presence_of :username, :if => proc {|u| u.signup_step >= 2 }
,其中signup_step
是数据库中的整数列。
所以,即使你说你不想将它存储在表单之间的数据库中,我认为你应该这样做。如果你这样做,你可以使用常规验证和模型,没有讨厌的黑客攻击。老实说,我怀疑这样做是一个问题。