2011-04-23 121 views
41

如何禁用所有Devise gem flash消息(「成功登錄」,「註銷」)?謝謝。Rails禁用設計flash消息

+1

重複這個問題http://stackoverflow.com/questions/5281365/selectively-turning-off-devises-flash-notices-in-rails-3 – Voldy 2011-04-23 11:19:18

回答

67

可能做到這一點的最簡單方法是

  1. 定義每個消息作爲一個空字符串
  2. 檢查字符串的長度告訴你一個提示信息之前。

在你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 %> 
+6

非常優雅!對於我的設計(2.1.0),只是將字符串設置爲''而不檢查空白嗎? – 2013-05-30 13:59:15

+1

即使在4年後,這仍然有效:+1,謝謝 – Abhinay 2015-06-25 06:48:01

-3

設計包括一個方便的生成所有的意見覆制到項目:

rails generate devise:views 

這樣你就可以自己編輯的意見,並決定要保留或扔掉什麼(提示信息) 。

+1

它看起來像是另一個問題的答案。你不能用這個來禁用flash消息。見布蘭登的答案。 – Voldy 2011-04-23 11:17:02

+1

如果你在每個視圖中顯示你的Flash消息,你可以刪除它。但似乎這個問題假設他們在佈局。 – 2012-10-13 01:15:39

30

的回答對我來說更適合是覆蓋設計會話控制器這樣

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消息

+3

在Rails 4和Devise 3.4.1中,我不得不將這添加到路由中:devise_for:users,controllers:{sessions:「sessions」} – 2015-04-24 21:20:40

5

我已經能夠將其禁用在給定的控制器通過重寫is_flashing_format?

def is_flashing_format? 
    false 
end 

我使用的設計3.5.6

0

For 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' }