【问题标题】:Showing error messages in a redirected request在重定向请求中显示错误消息
【发布时间】:2009-12-08 15:13:07
【问题描述】:

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

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

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

组件似乎是执行此类操作的 DRY 方式。现在我们没有它们,正确的解决方案是什么?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

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

    redirect_to welcome_url(:login_error=>true)
    

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

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

    【讨论】:

      【解决方案2】:

      你可以做一个渲染:

      render :template => "welcome/index"
      

      但您必须确保页面预期的所有变量都已加载,否则将不会呈现。

      【讨论】:

        【解决方案3】:

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

        Rails validation over redirect 中提供了一个更好看的答案(这是对原始发布者将错误数据存储在闪存中的想法的详细说明),尽管不幸的是我个人仍在努力让它工作......

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-28
          • 1970-01-01
          • 2021-07-23
          • 2014-12-31
          • 2016-02-15
          • 2018-07-24
          相关资源
          最近更新 更多