2010-10-03 7 views
11

रेल 3 में, आप फ़्लैश सेट करने के लिए सीधे redirect_to पर गुण प्राप्त कर सकते हैं। उदाहरण के लिए:रेल 3 में एक रीडायरेक्ट_to कॉल में कस्टम फ्लैश कुंजियों को कैसे अनुमति दें

redirect_to root_path, :notice => "Something was successful!" 

हालांकि, यह केवल :alert और :notice कुंजी के साथ काम करता है;

redirect_to root_path, :flash => { :error => "Something was successful!" } 

वहाँ इसे बनाने के लिए इतना है कि कस्टम कुंजी (जैसे :error, ऊपर) redirect_to के लिए यह निर्धारित किए बिना ही पारित किया जा सकता कोई तरीका है: आप कस्टम कुंजी का उपयोग करना चाहते हैं, आप एक अधिक वर्बोज़ संस्करण का उपयोग करने के लिए है :flash => {} में?

module ActionController 
    module Flash 
    extend ActiveSupport::Concern 

    included do 
     delegate :alert, :notice, :error, :to => "request.flash" 
     helper_method :alert, :notice, :error 
    end 

    protected 
     def redirect_to(options = {}, response_status_and_flash = {}) #:doc: 
     if alert = response_status_and_flash.delete(:alert) 
      flash[:alert] = alert 
     end 

     if notice = response_status_and_flash.delete(:notice) 
      flash[:notice] = notice 
     end 

     if error = response_status_and_flash.delete(:error) 
      flash[:error] = error 
     end 

     if other_flashes = response_status_and_flash.delete(:flash) 
      flash.update(other_flashes) 
     end 

     super(options, response_status_and_flash) 
     end 
    end 
end 

आप, ज़ाहिर है, अधिक कुंजियां :error अलावा जोड़ सकते हैं:

उत्तर

25

रेल में 4 आप इस

class ApplicationController < ActionController::Base 
    add_flash_types :error, ... 

और फिर कहीं

redirect_to root_path, error: 'Some error' 

http://blog.remarkablelabs.com/2012/12/register-your-own-flash-types-rails-4-countdown-to-2013

+0

बहुत बढ़िया कर सकते हैं! इसे स्वीकार किए गए उत्तर के रूप में चिह्नित करना क्योंकि इसका उपयोग आगे बढ़ना चाहिए। –

+0

मैं एक ऐसे मुद्दे पर चल रहा हूं जहां मैंने फ़्लैश प्रकार कहा: लॉगिन लेकिन मेरे पास "जादूगर मणि" से एक सहायक विधि लॉगिन भी है। हो सकता है कि उस समय फ़्लैश प्रकार जोड़ना इतना अच्छा नहीं है? – dtc

+0

प्रदर्शन के बारे में बात करना या एक ही व्यवहार को प्राप्त करने का सही तरीका, ** जाने का सबसे अच्छा तरीका क्या है: ** 1.- नए फ्लैश प्रकारों को जोड़ना ** जैसे 'add_flash_types: त्रुटि, ...' या ** 2.- फ्लैश ऑब्जेक्ट में नए हैंश जोड़ना ** के साथ ': flash => {: error => "अरे नहीं!" } '? –

8

मैं lib/core_ext/rails/action_controller/flash.rb में रखा जाता है और एक प्रारंभकर्ता के माध्यम से भरी हुई निम्नलिखित कोड का इस्तेमाल किया, (यह निर्मित रेल कोड का एक पुनर्लेखन है) ; फ़ंक्शन को मूल रूप से कैसे देखा गया यह देखने के लिए http://github.com/rails/rails/blob/ead93c/actionpack/lib/action_controller/metal/flash.rb पर कोड को चेक करें।

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