如果验证失败,清除 rails 输入字段内容

Clear rails input field content if validation fails

我想在我的输入字段中显示错误消息,所以我通过将它们放在占位符中来实现:

<%= f.input :age, label: false, placeholder: "#{f.object.errors.messages.has_key?(:age) ? f.object.errors.messages[:age].join(", ") : "Age*"}" %>

这是我的年龄模型验证:

validates :age, numericality: { greater_than_or_equal_to: 18 }

但是,如果我提交值为 11 的年龄,我将有一个带有值 11 的红色边框输入字段。 验证不通过如何清空输入框?

我尝试使用自定义验证方法,例如:

  validate :minimum_age

  def minimum_age
    if age < 18
      self.errors.add(:age, "must be at least 18 years old!")
      self.age = nil
    end
  end

这将清除该字段,但当它呈现视图时,我也会遇到 a 'field must not be empty' 错误,因为我只是将其设置为零。

你这个要求很尴尬;不过,如果您想清除该值,那么我建议您在视图中而不是模型中进行操作,或者您可以选择使用 JS 进行操作。

通过设置 f.object.age = ""

设法做到了
<%= f.input :age, label: false, placeholder: "#{f.object.errors.messages.has_key?(:age) ? "#{f.object.age = ""}Vârstă*" + " " + "( #{f.object.errors.messages[:age].join(", ")} )" : "Vârstă*"}" %>

如果有错误,您可以清除该字段:

unless @user.valid?
  @user.age = nil if @user.errors.include?(:age)
end

尝试

<%= f.input :age, label: false, placeholder: "your code", value: nil %>

顺便说一下,您可能想将占位符消息提取到辅助方法中,现在有点乱,哈哈

喜欢:

def render_error_message(f, key)
  f.object.errors.messages.has_key?(key) ? f.object.errors.messages[:age].join(", ") : "Age*"}
end

那么在你看来:

<%= f.input :age, label: false, placeholder: render_error_message(f, :age), value: nil %>