1

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

4

2 回答 2

10

你应该从他们的角度来把握事物。

为什么render使用而不是redirect

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

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

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

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

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

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

  • 或者如果它没有保存,你可以有一些你以前存储在会话中的信息


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

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

于 2012-04-09T09:13:21.217 回答
2

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

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

高温高压

于 2012-04-09T09:15:37.833 回答