代码之家  ›  专栏  ›  技术社区  ›  moondaisy

在未显示的错误中设计日志

  •  1
  • moondaisy  · 技术社区  · 9 年前

    我一直在考虑类似的问题,但我还没有能够指出我的错误。

    application.html.erb ,并且在显示其他flash消息(例如“成功登录”)时,它会起作用:

    <% flash.each do |name, msg| %>
      <% if msg.is_a?(String) %>
        <div class="alert alert-dismissible alert-<%= name.to_s == 'notice' ? 'success' : 'danger' %>">
          <button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>
          <%= content_tag :div, msg, :id => "flash_#{name}" %>
        </div>
      <% end %>
    <% end %>
    

    但是,不管怎样,我的任何模型在登录时都不会显示错误(我有3个不同的模型)。

    这是对请求的响应:

    Started POST "/users/sign_in" for 127.0.0.1 at 2017-10-14 16:25:35 -0300
    Processing by Users::SessionsController#create as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesión"}
      User Load (1.0ms)  SELECT  "users".* FROM "users" WHERE "users"."email" = $1 ORDER BY "users"."id" ASC LIMIT $2  [["email", "user0@gmail.com"], ["LIMIT", 1]]
    Completed 401 Unauthorized in 107ms (ActiveRecord: 5.0ms)
    
    
    Processing by Users::SessionsController#new as HTML
      Parameters: {"utf8"=>"✓", "authenticity_token"=>"5yM5EkGw1WVrFsaHm39Em7JkXgu0OZb5FDeO7bJA+SEQBYBybfw7ghbK1WM5I8krbBjP/pRWLF+PG0B2k+Crkw==", "user"=>{"email"=>"user0@gmail.com", "password"=>"[FILTERED]", "remember_me"=>"0"}, "commit"=>"Iniciar sesión"}
      Rendering users/sessions/new.html.erb within layouts/application
      Rendered users/sessions/new.html.erb within layouts/application (2.0ms)
      Rendered layouts/_navigation.html.erb (1.0ms)
      Rendered layouts/_messages.html.erb (0.5ms)
    Completed 200 OK in 285ms (Views: 223.4ms | ActiveRecord: 0.0ms)
    

    但如果用户/密码错误或用户尚未确认,则flash为空。

    我重新定义了控制器,使其能够在多个模型中正确工作,如中所述 wiki

    class Users::SessionsController < Devise::SessionsController
      include Accessible
      skip_before_action :check_user, only: :destroy
    end
    

    但我还没有重新定义方法。

    1 回复  |  直到 9 年前
        1
  •  4
  •   Community Mohan Dere    6 年前

    这个问题被标记为“design”,所以我假设你正在使用它。设计错误不是flash消息,也没有实现这种机制。看看这个部分 devise_error_messages! . 您可以将其包含在您的设计表单中。

    使现代化

    在问题更新之后,我正在更新我的答案。我已经创建了一个新的应用程序,其中有三个Desive模型,如前所述,并使用问题中的代码片段生成Flash。我遵循了问题描述中的教程,能够重现您的问题。看起来 flash.clear 在关注点中 清除 当用户重定向回新会话视图时闪烁。

    您可以添加以下内容:

    flash.clear unless params['action'] == 'new'
    

    作为一种快速黑客,可以防止flash清除重定向回新的会话页面。