在重定向的请求中显示错误消息

时间:2009-12-08 15:13:07

标签: ruby-on-rails

我正在使用Authlogic做一些简单的注册和登录。在我的WelcomeController中,我希望在同一页面'index'上有注册和登录表单,表单操作分别设置为各自的控制器,UsersController和UserSessionsController。成功注册/登录后,这些控制器将用户重定向到站点内受保护的配置文件页面。出错时我需要重定向回WelcomeController #index并显示错误。执行重定向时,此信息将丢失,我无法使用渲染,因为它是一个不同的控制器。处理此行为的正确方法是什么?

我可以将错误消息存储在Flash Hash中。这似乎是最简单的解决方案。

最近我在另一个我正在编写的应用程序中偶然发现了这个问题,我需要从PeerReviewerController渲染研究人员提交的RFP表单中的摘要页面。在这种情况下似乎使用现在已弃用的组件将是处理此问题的正确方法。即:render_component:controller => 'RFPForms',:action => 'summary',:id => 213

组件看起来像干这样做的方式。既然我们没有它们,那么正确的解决方案是什么?

3 个答案:

答案 0 :(得分:1)

一种简单易行的方法是在重定向上传递参数:

redirect_to welcome_url(:login_error=>true)

在您的视图或控制器中,您可以测试该参数:

<% if params[:error] -%>
  <div class="error">My Error Message</div>
<% end -%>

答案 1 :(得分:1)

你可以做渲染:

render :template => "welcome/index"

但是你必须确保加载页面所需的任何变量,否则它将不会呈现。

答案 2 :(得分:0)

Drew的答案不能满足更复杂的错误数据(例如一系列验证错误),而且Marten的答案可能会因需要复制WelcomeController#index的代码而违反DRY规则。

Rails validation over redirect中提供了一个更好看的答案(这是关于原始海报在闪存中存储错误数据的想法的详细说明),但不幸的是,我仍然在努力使其工作......