ruby-on-rails 对特定属性调用特定验证器

gojuced7  于 2023-01-27  发布在  Ruby
关注(0)|答案(2)|浏览(137)

我定义了一个自定义的EachValidator来查看属性是否有前导或尾随空格。我知道您可以将其添加到模型中,如下所示:

validates :name, whitespace: true

但是在我要调用的控制器中,只运行空白验证器以获得一些表单反馈。
我可以这样运行它:

Validators::WhitespaceValidator.new(attributes: :name).validate_each(obj, :name, obj.name)

有没有更短的方法来调用特定的验证器?就像你可以做user.valid?,但它运行所有的验证。我只想在名称属性的空白验证器。

w9apscun

w9apscun1#

既然你来这里不是为了被告知你的想法很糟糕,人们会讨厌它:下面是一个可以尝试想法::on
https://guides.rubyonrails.org/active_record_validations.html#on

validates :name, whitespace: true, on: :preview

然后在控制器中:

def something
  @model.valid?(:preview)
end

如果您还想在createupdate上运行验证,则可以指定如下内容

on: [:create,:update,:preview]

(感谢工程师)
另外:我不认为在用户真正保存记录之前给他们早期反馈是一个坏主意,如果正确实现的话。

ifmq2ha2

ifmq2ha22#

这感觉就像试图通过创建一个新的问题(拒绝无效对象)来解决一个问题(前导/尾随空格),我同意关于这是一个脆弱策略的评论,如果你想解决的问题是空格,那么在保存对象之前,为特定的属性解决这个问题; checkout Rails before_validation strip whitespace best practices

相关问题