5

मैं इस लाइब्रेरी का उपयोग कर रहा हूं, (https://github.com/CodeSeven/toastr) और मैं अपने फ़्लैश नोटिफिकेशन को जावास्क्रिप्ट फ़ंक्शन टोस्टर को मेरे लिए प्रदान करने की कोशिश कर रहा हूं। मैं इस त्रुटि को प्रत्येक त्रुटि या अधिसूचना के लिए कैसे कॉल करूं?रेल 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 प्रकार बनाने के लिए और फिर से प्रस्तुत करना है कि जे एस के रूप में अपने लेआउट में:

यहाँ एक परीक्षण अनुप्रयोग है कि टोस्ट अधिसूचना को लागू करता है।

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 %> 

तो इस तरह से आप सभी मानक व्यवहार आप flash वस्तु से करने के लिए इस्तेमाल कर रहे हैं मिलता है और आप ERB के माध्यम से सीधे अपने विचारों में लिखा जावास्क्रिप्ट समझने में आसान हो। आपको ApplicationController#toast विधि में विकल्प हैश जोड़ने की आवश्यकता हो सकती है ताकि आप निश्चित रूप से flash.now[:toastr] कर सकें। और इतने पर ... लेकिन यह आपको शुरू करना चाहिए।

+0

कुछ संदेश के साथ 'message.inspect' पर' रॉ 'जोड़ने के साथ। मुझे यह काम करने के लिए मिला है। सहायता के लिए धन्यवाद! – Rizowski

संबंधित मुद्दे