Rails禁用设计Flash消息

时间:2011-04-23 07:02:42

标签: ruby-on-rails devise

如何禁用所有Devise gem flash消息(“已成功登录”,“您已注销”)?感谢。

6 个答案:

答案 0 :(得分:69)

可能最简单的方法是

  1. 将每封邮件定义为空白字符串
  2. 在显示Flash消息之前检查字符串的长度。
  3. devise.en.yml文件中,将每封邮件指定为空:

    en:
      errors:
        messages:
          not_found: ''
          already_confirmed: ''
          not_locked: ''
    

    等。接下来,在布局中,在输出之前检查空白闪存字符串。

    <% flash.each do |key, value| %>
      <%= content_tag :div, value, :class => "flash #{key}" unless value.blank? %>
    <% end %>
    

答案 1 :(得分:33)

更适合我的答案是覆盖像这样的设计控制器

class SessionsController < Devise::SessionsController

  # POST /resource/sign_in
  def create
    super
    flash.delete(:notice)
  end

  # DELETE /resource/sign_out
  def destroy
    super
    flash.delete(:notice)
  end

end

这会安全地覆盖删除flash消息的create和destroy方法

答案 2 :(得分:5)

我已经能够通过覆盖def is_flashing_format? false end 在给定的控制器中禁用它们:

$char1= "";
$char2= "";

echo mb_detect_encoding($char1, 'UTF-8', true); // 'UTF-8'
echo mb_detect_encoding($char2, 'UTF-8', true); // 'UTF-8'

if($char1 == $char2) // TRUE
echo strcmp($char1, $char2); // 0

我正在使用Devise 3.5.6

答案 3 :(得分:3)

这项工作对我来说:

# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
  after_action :remove_notice, only: [:destroy, :create]

  private

  def remove_notice
    flash.discard(:notice) #http://api.rubyonrails.org/v5.1/classes/ActionDispatch/Flash/FlashHash.html#method-i-discard
  end
end

# add this line in 'config/routes.rb'
devise_for :users, :controllers => { sessions: 'users/sessions' }

我使用Users::SessionsController但您可以使用SessionsController,在此示例中我只有一个设计模型。

我使用flash.discard(:notice),但您可以使用flash.discard同时删除其他类型。 (自rails 3.0以来存在方法丢弃)

我更喜欢这种方法,因为视图的作用不是检查你的flash消息是否为空白。如果您有Flash消息,请打印!如果你不想要,所以不要创建flash消息; - )

答案 4 :(得分:1)

对于Rails 5.0.6,此代码将起作用。

app/controllers/sessions_controller.rb

class SessionsController < Devise::SessionsController

  def new
    flash.clear
    super
  end
end

不要忘记路线。

config/routes.rb

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

答案 5 :(得分:-4)

Devise包含一个方便的生成器,可以将所有视图复制到项目中:

rails generate devise:views

通过这种方式,您可以自己编辑视图,并决定要保留或丢弃的内容(闪存消息)。