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

时间:2017-09-22 23:25:11

标签: ruby-on-rails devise ruby-on-rails-5 flash-message

我尝试了以下但是没有用。它仍在使用默认的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

https://stackoverflow.com/a/5513172/148844

4 个答案:

答案 0 :(得分:1)

两种方式:

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

  2. 如果您的应用程序有点复杂并且您不想引入布局,请创建设计控制器(可以通过运行devise rake命令来完成),然后在闪存中添加一个标记。

  3. 例如:

    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)