Ruby on rails 简单表单和必填字段:不';如果验证中增加了条件,则不按要求处理
Simple Form自动检测是否存在验证:xxx、存在:true的验证,并将字段显示为必填字段(例如,标签上附加了星号) 这导致: 有趣的是,只要我给这个验证添加一个条件Ruby on rails 简单表单和必填字段:不';如果验证中增加了条件,则不按要求处理,ruby-on-rails,validation,simple-form,required,Ruby On Rails,Validation,Simple Form,Required,Simple Form自动检测是否存在验证:xxx、存在:true的验证,并将字段显示为必填字段(例如,标签上附加了星号) 这导致: 有趣的是,只要我给这个验证添加一个条件 validates :parent, presence: true, if: -> { true } …它不再这样做了: 这是错误还是功能?这是预期的行为,只有在将对象保存到数据库时才会运行验证,因此在此之前,您无法知道lambda是否返回true。当然,在您的情况下,它总是返回true,但假设您的lambda中
validates :parent, presence: true, if: -> { true }
…它不再这样做了:
这是错误还是功能?这是预期的行为,只有在将对象保存到数据库时才会运行验证,因此在此之前,您无法知道lambda是否返回true。当然,在您的情况下,它总是返回
true
,但假设您的lambda中有时间限制或其他更复杂的条件,例如
...., -> { Time.zone.now > Date.new(2017, 1, 1) }
当您为表单创建对象时,可能会返回false
,但当表单实际提交并保存到数据库时,经过了足够的时间,才返回true
因此,simple_form无法知道何时创建表单以及是否需要该字段。这是预期的行为,只有在将对象保存到db时才会运行验证,因此在此之前,您无法知道lambda是否返回true。当然,在您的情况下,它总是返回
true
,但假设您的lambda中有时间限制或其他更复杂的条件,例如
...., -> { Time.zone.now > Date.new(2017, 1, 1) }
当您为表单创建对象时,可能会返回false
,但当表单实际提交并保存到数据库时,经过了足够的时间,才返回true
因此,simple_form无法知道何时创建表单时是否需要该字段。您可以将其称为功能,因为这是经过深思熟虑的。如果您查看gem代码(尤其是在和处),您会注意到,如果状态验证器有一个条件,如
If
或除非,则该字段不再按要求标记。您可以将其称为功能,因为这是故意的。如果您查看gem代码(尤其是在和处),您会注意到,如果状态验证器有一个条件,如If
或除非,则该字段不再标记为必需。我这样解决了:terms
作为复选框元素:
validates :terms, presence: true, acceptance: true
这样,它在表单级别验证是否只有在选中“term”复选框后才提交该复选框。希望它对将来的人有所帮助。我这样解决了:术语作为复选框元素:
validates :terms, presence: true, acceptance: true
这样,它在表单级别验证是否只有在选中“term”复选框后才提交该复选框。希望它能帮助将来的人