何时在处理错误验证时使用render vs redirect_to

时间:2012-04-09 08:48:03

标签: ruby-on-rails ruby-on-rails-3

我有一个相当复杂的视图,它有多种形式,对这些表单,分页和其他功能进行大量验证。验证失败时,我喜欢使用渲染,因为您可以更具体地了解表单中发生的错误。但是,当我使用渲染时,会出现不同的编译器错误,例如[]:Array“和”undefined model_name“的”未定义方法`total_pages'。这是我必须使用redirect_to的情况,还是可以以某种方式解决在呈现视图时出现的错误。非常感谢!

2 个答案:

答案 0 :(得分:10)

你应该从他们的角度来理解事物。

为什么使用render代替redirect

  • 使用render时,传递实例化对象

  • 这个新创建或更新的对象收到了一些参数

  • 尝试保存对象时,会触发验证,如果不成功,则会向当前实例添加错误

  • 因此您的对象在内存中包含验证错误。

但是当你使用重定向时,你会重新启动一个新的堆栈,它对内存中的前一个对象一无所知,没有任何魔法:

  • 保存对象,您可以从数据库中获取持久化数据

  • 或者如果没有保存,您可以获得之前存储在会话中的一些信息


更接近你的问题:在使用渲染之前,你必须实例化页面所需的所有对象。

如果缺少预期的实例变量,那么视图就会失败。

答案 1 :(得分:2)

首先,这些不是编译器错误 - 它的运行时错误 其次,你应该在控制器中检查你的数据,以确保它被正确地提供给渲染,或者在视图中做一些条件块,以便处理这些不同的数据结构。

最后,redirect_to只是一种移动用户的技巧,它可以在这里使用,但你仍然需要处理这些错误,即使在重定向到页面......

HTH