如何为 Devise 创建自定义 Flash 消息?

How do I create a custom flash message for Devise?

我尝试了以下方法,但没有用。它仍在使用默认的即显消息。

class Users::SessionsController < Devise::SessionsController
  after_action :custom_welcome, :only => [:create]

  def custom_welcome
    flash.notice = "Welcome back "+current_user.name+"." if flash.keys.include?(:notice)
  end
end

参考:https://github.com/plataformatec/devise#configuring-controllers

两种方式:

  1. 为设计页面使用您自己的布局(layout 关键字和控制器中的参数)。在布局中,您可以有单独的部分来显示您的设计消息。

  2. 如果你的应用程序有点复杂并且你不想引入布局,创建设计控制器(可以通过 运行 设计 rake 命令完成),然后只需要一个标志在你的闪光灯里。

例如:

flash[:devise] = true

在负责为您的即显消息生成 html 的部分视图中检查此标志:

<% if flash[:devise] %>
  #...
<% else %>
  # ...
<% end %>

这有效。

flash.notice = "Welcome back #{current_user.name}." if flash.key?(:notice)

您正在覆盖一个设计控制器,因此您需要告诉您的应用您想要使用该控制器。在 routes.rb 中执行以下操作(如果您还没有这样做):

devise_for :users, controllers: { sessions: 'users/sessions' }

进一步说明,如果您仍然收到默认的闪现消息,那是因为 Devise 仍在使用原始控制器,通过定义您告诉它使用的自定义控制器。

Docs say(一般):
1. 在区域设置中使用 :key 设置自定义 flash 消息:config/locales/devise.en.yml
2.调用DeviseController方法set_flash_message(key, kind, options = {})

Example from devise/sessions_controller:
set_flash_message!(:signed_in, :notice)