5

私はこのライブラリ(https://github.com/CodeSeven/toastr)を使用しています。Toastrが提供しているjavascript関数にFlash通知をプッシュしようとしています。すべてのエラーまたは通知に対してこの関数をどのように呼び出すのですか?Rails 4 - フラッシュ通知ではなくトースター通知

これは、トースター通知を作るために使用されている方法の一つである:

toastr.warning('This is a warning!') 

私はカンカンから、デフォルトのエラーでそのメソッドを呼び出すことができるかどうかを確認するためにApplicationControllerに方法を作ってみました。私はこのメソッドのさまざまなバージョンを持っていますが、どちらも機能しませんでした。

def toast(type, text) 
    #if Logic here for various errors/notifications 
    respond_to do |format| 
     format.js { render action: "toastr.warning(#{text})", layout: false} 
    end 
end 

def toast(type, text) 
    #if Logic here for various errors/notifications 
    "toastr.warning(#{text})" 
end 

そして私はカンカンブロック内でこのメソッドを使用しよう:

rescue_from CanCan::AccessDenied do |exception| 
    toast :error, exception.message 
    redirect_to root_url 
end 

私はこれが可能であることを前提としていますが、私はそれを実装する方法だけでわかりませんよ。これをやろうとする人はあまりいないし、おそらく理由があるだろう。私は何をしようとしているのかについてどのような提案をしても開かれています。ここで

トースト通知を実装してテストするアプリケーションです: http://codeseven.github.io/toastr/demo.html

答えて

4

私はお勧めは何の事のこの種のための新しいflashタイプを作成して、あなたのレイアウトにJSとしてそれをレンダリングすることです。あなたがflashオブジェクトからに慣れているすべての標準的な動作を取得し、あなたがERB経由で直接あなたの意見で書かれたJavaScriptを理解しやすい取得

ApplicationController 

def toast(type, text) 
    flash[:toastr] = { type => text } 
end 


app/views/layouts/<your layout>.html.erb 
# (or in a partial to be reused in various layouts) 
# the <script> tag isn't needed if code snippet is 
# included in an existing script block, of course. 

<% if flash[:toastr] %> 
    <script type="text/javascript"> 
    <% flash[:toastr].each do |type, message| %> 
     toastr.<%= type %>(<%= message.inspect %>) 
    <% end %> 
    </script> 
<% end %> 

ので、この方法。 ApplicationController#toastメソッドにオプションのハッシュを追加する必要がある場合がありますので、もちろんflash.now[:toastr]を実行することもできます。それで...しかし、これはあなたを始めるはずです。

+0

'message.inspect'に' Raw'を追加するなど少し微調整します。私はそれを働かせました。助けてくれてありがとう! – Rizowski

関連する問題