Rails 2.3.4坚持验证失败的模型

时间:2013-12-31 22:06:17

标签: ruby-on-rails validation rails-activerecord ruby-on-rails-2

我有一个标准的html表单帖子,在服务器端使用rails模型进行持久化和验证。

为了便于讨论,我们称之为“汽车”模型。

何时

car.save

调用验证器触发并在模型中设置错误字段列表。

如何最好地获得一个具有删除验证失败的字段的对象,即我不必删除用户正确输入的表单上的字段?

他们使用的验证模式很棒但是如何在验证失败时获取钩子,以便我可以从模型中删除虚假条目?

我可以看到手动迭代错误列表并编写一个大的case语句,但这似乎是一个黑客攻击。

2 个答案:

答案 0 :(得分:0)

在控制器中,如果验证失败,则从创建操作中呈现new操作,并从用户输入填充实例变量@car(即params哈希)。然后,在您的视图中,添加一个逻辑检查(在form周围的if块或帮助器上的三元组,您的选择),自动将表单字段的值设置为传递的params值如果汽车存在,请到@car这样,表格在第一次访问时将是空白的,理论上只有在出错时才会重新填充。在任何情况下,除非设置@car,否则不会填充它们。

答案 1 :(得分:0)

修改 不要这样做(见评论),但如果你必须在这里:

我最后使用了

的电话
@car.invalid? 

在循环内部删除无效条目:

  params[:car].each do | key, array|
      if @car.errors.invalid?(key)
        @car[key.to_sym] = ''
      end
  end
  render :action=> 'new'

请注意此处使用渲染与重定向。通过重定向从rails模型验证中保留错误消息似乎很棘手,请参阅: Rails validation over redirect

我仍然觉得应该有一个帮助方法或更好的方法。