【问题标题】:Custom Rails Validation not adding 'field_with_errors' wrapper to inputs自定义 Rails 验证未将“field_with_errors”包装器添加到输入
【发布时间】:2016-04-07 16:46:51
【问题描述】:

我正在使用需要一些自定义验证的表单来开发 Rails 4 站点。但是,当验证标准失败并显示错误消息时,我正在检查的输入字段没有给出 field_with_errors 包装器。正在验证的所有其他字段都在正确获取包装器,但它们的验证是对每个属性的简单存在检查。

如何在自定义验证中添加包装器?

附加说明:如果可能,我只想显示一次我的错误消息 - 但突出显示两个字段。

在我的模型中:

validate :at_least_one_apply_method

def at_least_one_apply_method
  if [self.apply_url, self.application_instructions].reject(&:blank?).size == 0
    errors[:base] << ("Please provide at least one: Where to Apply or Applications Instructions.")
  end
end 

如果需要任何其他信息,请告诉我。谢谢!

【问题讨论】:

    标签: ruby-on-rails validation ruby-on-rails-4


    【解决方案1】:

    您正在将自定义错误消息添加到 errors[:base]。您需要将其添加到要包装的字段中,例如

    errors[:apply_url] << ("Please provide at least one: Where to Apply or Applications Instructions.")
    errors[: application_instructions] << ("Please provide at least one: Where to Apply or Applications Instructions.")
    

    【讨论】:

    • Gotcha - 但我最初使用的是 base,因此它没有将字段名称插入到消息中。现在它将显示“申请网址请提供至少一项:申请地点或申请说明”。 - 还有另一种方法可以排除字段名称吗?另外,我可以只显示一条错误消息而不是两条吗?
    • hmm,您可以回到原来的状态并使用 javascript 将错误类添加到您想要突出显示的字段中。不,您不需要将两个错误消息都添加到错误哈希中。
    【解决方案2】:

    仅当 object.errors 哈希具有该字段名称的键时,才会绑定到已提交的错误消息。 但是您正在使用 base 键添加自定义消息。

    所以你可以像下面那样做

    validate :at_least_one_apply_method
    
    def at_least_one_apply_method
      [self.apply_url, self.application_instructions].map{|field| field.blank? ? (self.errors.add("field","Please provide at least one: Where to Apply or Applications Instructions.")
      ") : ''}
    end 
    

    【讨论】:

    • 嗯,这个写的不能正常工作。我认为在最后一个右括号之前有一个额外的引号?我的也需要一个额外的“结束”。
    • 即便如此——它似乎没有正确验证。它没有像预期的那样用错误类包装字段,也没有检查另一个 - 它需要两者。有误解你的答案吗?
    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-17
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    • 2014-12-03
    • 1970-01-01
    相关资源
    最近更新 更多