【问题标题】:Devise Error Messages Redirect To Unwanted Route设计错误消息重定向到不需要的路由
【发布时间】:2014-10-14 21:35:09
【问题描述】:

我已将登录和注册表单移至我的主页(根目录)。他们完成了工作,用户可以登录并成功注册。但是,当在注册和密码不匹配的情况下呈现错误时,用户将被重定向到路由:/user/sign_up 以显示该错误。 如何在不将用户重定向到注册页面的情况下在同一页面(主页)中显示错误? 我已经按照here 的步骤进行操作。

这是我的 home.html.erb 文件:

    <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
    <%= devise_error_messages! %>

    <div><%= f.label :email %><br />
    <%= f.email_field :email %></div>

    <div><%= f.label :password %><br />
    <%= f.password_field :password %></div>

    <div><%= f.label :password_confirmation %><br />
    <%= f.password_field :password_confirmation %></div>

    <div><%= f.submit "Sign up" %></div>
    <% end %>

这是我的路线:

    devise_for :user
    root 'pages#home'

PS。我已经尝试将注册路由更改为主路由,但错误仍会将用户带到 /user/sign_up

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 devise


    【解决方案1】:

    好的,所以我按照以下教程解决了这个问题:

    注册

    http://natashatherobot.com/devise-sign-up-ajax-rails/
    

    用于登录

    http://natashatherobot.com/devise-rails-sign-in/
    

    【讨论】:

      【解决方案2】:

      您需要 application.html.erb 上的 :flash 和 :notice ,如下所示:

          <p class="notice alert alert-info text-center"><%= notice%></p>
            <% elsif alert%>
          <p class="alert alert alert-warning text-center"><%= alert %></p>
      

      Devise 使用带有 I18n 的 flash 消息和 flash 键 :notice 和 :alert。要自定义您的应用,您可以设置您的语言环境文件:

      然后您可以自定义警报和消息:

      en:
        devise:
          sessions:
            user:
              signed_in: 'Welcome user, you are signed in.'
            admin:
              signed_in: 'Hello admin!'
      

      【讨论】:

        【解决方案3】:

        两步通过ajax提交表单

        通过 ajax 提交登录/注册表单

        <%= form_for(resource, :as => resource_name, :url => registration_path(resource_name), remote: true) do |f| %>
        ...
        <% end %>
        

        覆盖会话控制器以响应非 html 格式

        类 RegistrationsController <:registrationscontroller>

         def create
           build_resource(sign_up_params)
        
           if resource.save
           respond_to do |format|
           format.html {
            ...
           }
           format.js {
            ...
           }
           end
          end
         end
        

        这实际上不是,但应该给你一个想法

        【讨论】:

        • 您能进一步解释一下您的控制器吗?我是 RoR 的初学者。谢谢你。顺便说一句,我已经尝试过您发布的控制器,但没有任何结果。我正在使用 Rails 4 和 Devise 3 @CuriousMind
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-11-24
        • 2023-04-01
        • 1970-01-01
        • 2022-07-18
        • 2017-03-15
        • 1970-01-01
        相关资源
        最近更新 更多