对于单个模型和数据库表,我有多种形式,具有不同(数量)的字段。如何添加模型验证?
我在模型中定义了所有验证,当我尝试提交表单时,Rails会通过每个模型字段验证进行验证。请告诉我如何在Rails中使用相同的模型来验证具有不同字段的不同表单。
答案 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_type
和hidden_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)检查上面的验证