我有一个标准的html表单帖子,在服务器端使用rails模型进行持久化和验证。
为了便于讨论,我们称之为“汽车”模型。
何时
car.save
调用验证器触发并在模型中设置错误字段列表。
如何最好地获得一个具有删除验证失败的字段的对象,即我不必删除用户正确输入的表单上的字段?
他们使用的验证模式很棒但是如何在验证失败时获取钩子,以便我可以从模型中删除虚假条目?
我可以看到手动迭代错误列表并编写一个大的case语句,但这似乎是一个黑客攻击。
答案 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
我仍然觉得应该有一个帮助方法或更好的方法。