2012-04-09 69 views
1

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

回答

10

你应该从他们的角度去理解事情。

为什么render代替redirect

  • 当您使用render,你通过实例化对象

  • 这个对象,新创建或更新,收到了一些PARAMS

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

  • 所以你的对象在内存中包含验证错误。

但是当你使用重定向,重新启动一个新的堆栈,它不知道在内存中的对象前任何东西,也不可能有任何魔法:

  • 无论对象是保存,并可以从数据库

  • 获得持续的数据,或者如果它不救,你可以有你以前存储在会话中的某些信息


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

这只是逻辑视图失败,如果预期的实例变量丢失。

+0

大解释,让我很好地把握它。谢谢。 – 2014-01-07 22:49:46

2

首先,这些不是编译器错误 - 它的运行时错误。
其次,您应该检查控制器中的数据以确保其呈现正确进行渲染,或者在视图中执行一些条件块以应对这些不同的数据结构。

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

HTH