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

Ruby on rails 如果验证失败,请清除rails输入字段内容,ruby-on-rails,validation,ruby-on-rails-4,simple-form,erb,Ruby On Rails,Validation,Ruby On Rails 4,Simple Form,Erb,我想在我的输入字段中显示错误消息,因此我将它们放在占位符中: <%= f.input :age, label: false, placeholder: "#{f.object.errors.messages.has_key?(:age) ? f.object.errors.messages[:age].join(", ") : "Age*"}" %> 但是,如果我提交的年龄值为11,我将有一个红色边框的输入字段值为11。 如果验证未通过,如何清除输入字段 我尝试了自定义验证方法,类

我想在我的输入字段中显示错误消息,因此我将它们放在占位符中:

<%= f.input :age, label: false, placeholder: "#{f.object.errors.messages.has_key?(:age) ? f.object.errors.messages[:age].join(", ") : "Age*"}" %>
但是,如果我提交的年龄值为
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
validate:最低年龄
def最低年龄
如果年龄<18岁
self.errors.add(:age,“必须至少18岁!”)
self.age=nil
结束
结束

这将清除字段,但当它渲染视图时,我还将出现一个“字段不能为空”错误,因为我刚刚将其设置为零

这是一个非常尴尬的要求;不过,如果您想清除该值,我建议您在视图中执行,而不是在模型中执行,或者您可以选择使用JS执行。

通过设置
f.object.age=“”


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

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

那么在你看来,

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


哈哈,为什么这么尴尬?我只想在占位符中显示错误消息:D@BogdanPopa通常占位符用于提示,我们倾向于沿输入行显示错误消息。当然,但在控制器内将其设置为nil后,在我的f.object.age.errors中,我还将显示:true validation error。但我会支持你的建议:)那是因为你只需
render:new
,rails只需渲染视图而不运行控制器代码。明确地说,不要为20行输入留下重复代码:)谢谢,value:nil应该这样做。
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 %>