Rails服务器端验证问题

时间:2018-12-26 12:04:22

标签: ruby-on-rails

对于单个模型和数据库表,我有多种形式,具有不同(数量)的字段。如何添加模型验证?

我在模型中定义了所有验证,当我尝试提交表单时,Rails会通过每个模型字段验证进行验证。请告诉我如何在Rails中使用相同的模型来验证具有不同字段的不同表单。

3 个答案:

答案 0 :(得分:2)

从模型中提取验证到特定于视图的FormObjects中。这样,每个表单将仅使用其需要的验证来使用自己的表单对象。

https://robots.thoughtbot.com/activemodel-form-objects

https://medium.com/selleo/essential-rubyonrails-patterns-form-objects-b199aada6ec9

答案 1 :(得分:1)

在模型中定义验证是一种好习惯,但是使它们成为FAT却带来了问题。要验证的字段数量更多,将增加模型中的行数。因此,在一处完成所有这些操作而无需使模型成为FAT,并且应该可以访问Active Record Validation。因此,可以使用active_interaction gem来实现。

https://github.com/AaronLasseigne/active_interaction

https://taylor.fausak.me/2014/01/23/confidently-manage-business-logic-with-active-interaction/

答案 2 :(得分:0)

您有2个表单,分别包含10个字段和20个字段。 (您也可以有多种形式。)

在两种形式中分别以值form_typehidden_field添加form1 attr_accessor和form2

对于Form-1(10个字段),将对象属性form_type设置为form1,在验证中,您可以使用form_type跳过验证,

validates :name, presence: true, if: Proc { |obj| obj.form_type != 'form1' }

因此它将仅对Form-2(其中form_type设置为form2)检查上面的验证