2010-11-04 28 views

回答

52

您只需將其定義爲本地文件中的空字符串即可。在這種情況下,你什麼都看不到。

+0

謝謝shingara,其實我做到了,但我的CSS仍然出現 – benoitr 2010-11-04 15:20:56

+0

測試,如果它是空白的。 – shingara 2010-11-04 16:18:31

+0

只是做了謝謝! – benoitr 2010-11-04 16:23:26

37

好的!

正如Shingara說我在devise.en.yml

sessions: 
    signed_in: '' 

限定一個空字符串,我也改變一個位以下行(由漂亮發電機提供):

<% flash.each do |name, msg| %> 
    <%= content_tag :div, msg, :id => "flash" if msg.length > 0 %> 
<% end %> 

在這樣,我的CSS不會出現。

+7

稍微整理一下,您可以將「msg.length> 0」更改爲「msg.present?」。它會更具可讀性。 – 2011-03-14 07:53:43

+0

這個文件通常位於'config/locales/devise.en.yml' – philfreo 2014-01-05 01:03:27

8

在區域文件空字符串(如上面所建議的),而且還添加以下CSS代碼段隱藏(而不是用你的閃光燈意見瞎搞)

.flash.alert:empty { 
    display: none; 
} 
2

從我的角度來看,我不明白這一點在清空字符串翻譯時,可以輕鬆修改控制器的工作方式。 我想這種方式更加正確和令人滿意。

更好的答案可以是重寫sessionController中的destroy方法。

只是創建放在一個文件:應用程序/控制器/ sessions_controller.rb

正如你可以看到我們發表意見線製作Flash的消息。

class SessionsController < Devise::SessionsController 
    # DELETE /resource/sign_out 
    def destroy 
    signed_out = (Devise.sign_out_all_scopes ? sign_out : sign_out(resource_name)) 
    #set_flash_message :notice, :signed_out if signed_out && is_flashing_format? 
    yield if block_given? 
    respond_to_on_destroy 
    end 
end 
+0

你可能不想這樣做,因爲你是猴子補丁。如果修復了錯誤,那麼你正在失去修復。 通過設置您不關心的空字符串,並確保您不會打印出空字符串消息,而是按照設計的方式使用系統。 – 2015-07-03 18:53:06

6

另一種靈活的方式,這是動作後取消設置的通知:

class SessionsController < Devise::SessionsController 
    after_action :remove_notice, only: :destroy 

    private 

    def remove_notice 
    flash[:notice] = nil 
    end 
end 

有了這個解決方案,您可以添加條件,以消除或不通知。

0

我認爲,現在設計理解,如果您將config/locals/devise.en.yml中的錯誤消息更改爲空字符串,它會自動忽略它。至少這是我的工作。

0

您可以這樣做,請相應地更改條件類型和閃存類型。

flash.delete(:alert)if flash [:alert] ==「您需要先登錄或註冊才能繼續。」 @drivers = params [:keyword] .blank? ? []:Driver.find(params [:keyword])

您可以在過濾器之前執行此操作。

4

另一種方法是,如果你忽略了設計的控制器,在創建行動,把這個代碼,刪除閃存消息:

class MyDevise::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 

this was answered in this other SO question. 有關如何重寫設計控制器一篇博客文章,看到my blog post