我尝试了以下但是没有用。它仍在使用默认的Flash消息。
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
答案 0 :(得分:1)
两种方式:
将自己的布局用于设计页面(layout
关键字与控制器中的参数)。在布局中,您可以使用单独的部分来显示您的设计消息。
如果您的应用程序有点复杂并且您不想引入布局,请创建设计控制器(可以通过运行devise rake命令来完成),然后在闪存中添加一个标记。
例如:
flash[:devise] = true
在部分视图中检查此标志,负责为您的Flash消息生成html:
<% if flash[:devise] %>
#...
<% else %>
# ...
<% end %>
答案 1 :(得分:1)
您正在覆盖设计控制器,因此您需要告诉您的应用程序您要使用该控制器。在routes.rb
中执行以下操作(如果您尚未执行此操作):
devise_for :users, controllers: { sessions: 'users/sessions' }
为了扩展这一点,如果您仍然收到默认的Flash消息,那是因为Devise仍在使用原始控制器,通过定义您告诉它使用它的自定义控制器。
答案 2 :(得分:0)
这很有用。
flash.notice = "Welcome back #{current_user.name}." if flash.key?(:notice)
答案 3 :(得分:0)
Docs say(通常):
1.在区域设置中使用:key
设置自定义Flash消息:config/locales/devise.en.yml
2.调用DeviseController方法set_flash_message(key, kind, options = {})
devise/sessions_controller中的示例:
set_flash_message!(:signed_in, :notice)