2012-03-24 8 views

答えて

13

あなたがいずれかを実行できます。

  1. Goは\ロケールを設定へ\、あなたは文字列を空にしたい行を変更します(それらが動作しません削除)devise.en.yml。したがって、次のようになります。

    sessions: 
        signed_in: '' 
        signed_out: '' 
    
  2. deviseのセッションコントローラを拡張/上書きします。これを行うには、hereからcreatedestroyアクションコードをコピーして、このような工夫のセッションコントローラから継承するコントローラ(のは、セッションそれを呼びましょう)、それをペーストするには:

    class SessionsController < Devise::SessionsController 
    

    その後set_flash_messageへの呼び出しを削除します。どのような他の人が言った上で、この方法はそのよう工夫か何かを延長するよりも少し楽かもしれません

    devise_for :users, :controllers => { :sessions => 'sessions' } 
    
+1

Rails 4とDevise 3.4以降では、config/locales/en.ymlが必要です(en:とdevise:をスコープに追加することを忘れないでください)。 –

+0

完璧に動作します!私は翻訳を空白の画面にすることができず、一回のフラッシュ通知を抑制することはできませんでした! – danielricecodes

0

ビル:最後に、あなたのルートがファイルを編集ので、この変更は有効になります。

行全体を削除するのではなく、空の文字列を使用してください。そうでない場合は、そのメッセージのデフォルト値を使用するようになります。

# blank out any string you don't want to render as a message 
devise: 
    failure: 
    already_authenticated: '' 
    unauthenticated: '' 
    unconfirmed: '' 
    ... 

今のところ、deviseは空の文字列をフラッシュアラートとして渡します。しかし、今では、メッセージが空の文字列

#<ActionDispatch::Flash::FlashHash:0xa7647c4 
    @closed=false, 
    @flashes={:alert=>""}, 
    @now=nil, 
    @used=#<Set: {:alert}>> 

私はすべてのメッセージを一緒に集める扱う私ApplicationHelperファイル内のヘルパーメソッドを使用しているとこのようになります。これを別の方法で行うこともできますが、これによりアイデアが得られます。

def all_messages 

    # Standard flash messages 
    messages = flash.map{|key,val| {:type=>key, :message=>val} unless val.blank? }.compact 
    #              |-------------------------| 
    # This is where the magic happens. This is how I ignore any blank messages 

    # Model validation errors 
    model = instance_variable_get("@#{controller_name.singularize}") 
    unless model.nil? 
    messages += model.errors.full_messages.map do |msg| 
     {:type=>:error, :message=>msg} 
    end 
    end 

    return messages 

end 

出来上がり、unless val.blank?文はnilに空白値をマッピングし、そして.compact方法は無い空白のメッセージできしむクリーンな配列であなたを残して、任意のゼロ値を削​​除します。

関連する問題