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

时间:2015-12-10 10:54:24

标签: 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*"}" %>

这是我对年龄的模型验证:

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'错误,因为我只是将其设为零。

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

尝试

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

顺便说一下,你可能想把你的占位符消息提取到helper方法中,现在它有点乱,lol

像:

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 %>

答案 2 :(得分:0)

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

答案 3 :(得分:0)

通过设置<%= 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ă*"}" %>

来管理
order.setOrderStatus(OrderStatus.PENDING_COMPLETION);  //2
return salesOrderDao.saveOrUpdate(order);              //3