我有一个相当复杂的视图,它有多个表单、对这些表单的大量验证、分页和其他功能。当验证失败时,我喜欢使用渲染,因为这样您就可以更具体地了解表单中发生的错误。但是,当我使用渲染时,会出现不同的编译器错误,例如“[]:Array 的未定义方法 `total_pages'”和“未定义模型名称”。这是我必须使用 redirect_to 的情况,还是以某种方式解决在呈现视图时出现的错误是否可行。非常感谢!
问问题
2634 次
2 回答
10
你应该从他们的角度来把握事物。
为什么render
使用而不是redirect
:
当你使用时
render
,你传递实例化的对象这个对象,新创建或更新,接收了一些参数
尝试保存对象时,会触发验证,如果不成功,则会将错误添加到当前实例
所以你在内存中的对象包含验证错误。
但是当您使用重定向时,您会使用一个新堆栈重新启动,该堆栈对内存中的前一个对象一无所知,不可能有任何魔法:
要么保存对象,您就可以从数据库中获取持久数据
或者如果它没有保存,你可以有一些你以前存储在会话中的信息
为了更接近地回答您的问题:在使用渲染之前,您必须实例化页面所需的所有对象。
如果缺少预期的实例变量,这只是逻辑视图失败。
于 2012-04-09T09:13:21.217 回答
2
首先,这些不是编译器错误——它的运行时错误。
其次,您应该检查控制器中的数据以确保其被正确提供以进行渲染,或者在视图中执行一些条件块以应对这种不同的数据结构。
最后,redirect_to
这只是一种移动用户的技术,它可以在这里使用,但您仍然需要处理这些错误,即使在重定向到的页面中......
高温高压
于 2012-04-09T09:15:37.833 回答