如何为 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
两种方式:
为设计页面使用您自己的布局(layout
关键字和控制器中的参数)。在布局中,您可以有单独的部分来显示您的设计消息。
如果你的应用程序有点复杂并且你不想引入布局,创建设计控制器(可以通过 运行 设计 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)
我尝试了以下方法,但没有用。它仍在使用默认的即显消息。
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
两种方式:
为设计页面使用您自己的布局(
layout
关键字和控制器中的参数)。在布局中,您可以有单独的部分来显示您的设计消息。如果你的应用程序有点复杂并且你不想引入布局,创建设计控制器(可以通过 运行 设计 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)