【问题标题】:How do I create a custom flash message for Devise?如何为 Devise 创建自定义 Flash 消息?
【发布时间】:2017-09-22 23:25:10
【问题描述】:

我尝试了以下方法,但它不起作用。它仍在使用默认的 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

【问题讨论】:

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


    【解决方案1】:

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

    示例来自devise/sessions_controller:
    set_flash_message!(:signed_in, :notice)

    【讨论】:

      【解决方案2】:

      这行得通。

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

      【讨论】:

        【解决方案3】:

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

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

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

        【讨论】:

        • 这没有回答问题。
        • 没错,但我确实有controllers: { sessions: 'users/sessions',
        【解决方案4】:

        两种方式:

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

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

        例如:

        flash[:devise] = true
        

        在负责为 Flash 消息生成 html 的局部视图中检查此标志:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-09-19
          • 2013-02-04
          • 1970-01-01
          • 2014-04-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-31
          相关资源
          最近更新 更多