Simple-Form自动检测是否存在validates :xxx, presence: true验证,并将该字段显示为必填字段(例如,在标签后附加一个星号)。
validates :parent, presence: true这将导致:

有趣的是,只要我在这个验证中添加一个条件...
validates :parent, presence: true, if: -> { true }...it不再这样做了:

这是一个bug还是一个特性?
发布于 2017-01-31 18:10:34
这是预期的行为,仅当您将对象保存到数据库时才会运行验证,因此在此之前您无法知道lambda是否返回true。当然,在您的情况下,它总是返回true,但是假设您的lambda中有一个时间约束,或者其他一些更复杂的条件,例如
...., -> { Time.zone.now > Date.new(2017, 1, 1) }也许当您为表单创建对象时,它会返回false,但是当表单实际提交并保存到数据库时,返回true的时间已经足够长了。
因此,simple_form无法知道表单是在何时创建的,无论该字段是否为必填字段。
发布于 2017-01-31 18:11:34
你可以称它为一个特性,因为它是故意的。如果您查看gem代码(特别是在calculate和conditional中),您会注意到,如果存在验证器有一个条件,如if或unless,则该字段不再标记为必填。
发布于 2017-07-19 19:44:02
对于:terms是一个复选框元素,我是这样解决的:
validates :terms, presence: true, acceptance: true这样,它就可以在表单级别验证“term”复选框是否仅在选中后才会提交。希望对未来的人有所帮助。
https://stackoverflow.com/questions/41954413
复制相似问题