如果验证失败,清除 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 %>
我想在我的输入字段中显示错误消息,所以我通过将它们放在占位符中来实现:
<%= 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 %>