我定义了一个自定义的EachValidator来查看属性是否有前导或尾随空格。我知道您可以将其添加到模型中,如下所示:
validates :name, whitespace: true
但是在我要调用的控制器中,只运行空白验证器以获得一些表单反馈。
我可以这样运行它:
Validators::WhitespaceValidator.new(attributes: :name).validate_each(obj, :name, obj.name)
有没有更短的方法来调用特定的验证器?就像你可以做user.valid?
,但它运行所有的验证。我只想在名称属性的空白验证器。
2条答案
按热度按时间w9apscun1#
既然你来这里不是为了被告知你的想法很糟糕,人们会讨厌它:下面是一个可以尝试想法:
:on
https://guides.rubyonrails.org/active_record_validations.html#on
然后在控制器中:
如果您还想在
create
和update
上运行验证,则可以指定如下内容(感谢工程师)
另外:我不认为在用户真正保存记录之前给他们早期反馈是一个坏主意,如果正确实现的话。
ifmq2ha22#
这感觉就像试图通过创建一个新的问题(拒绝无效对象)来解决一个问题(前导/尾随空格),我同意关于这是一个脆弱策略的评论,如果你想解决的问题是空格,那么在保存对象之前,为特定的属性解决这个问题; checkout Rails before_validation strip whitespace best practices