2009-10-16 10 views
38

मेरा मूल उपयोग केस कुछ प्रसंस्करण करता है, flash[:notice] सेट करें, और उसके बाद एक नए पृष्ठ पर रीडायरेक्ट करें। जो मैं बता सकता हूं, रीडायरेक्ट फ्लैश टैग रीसेट करें (अगर मैं गलत हूं तो कृपया मुझे सही करें)। दृढ़ता हासिल करने का कोई तरीका है? सत्र का उपयोग करना एक विकल्प नहीं है, और मैंने कुकीज़ का उपयोग करके समस्या के आसपास हैक किया है, लेकिन मुझे लगता है कि एक बेहतर तरीका होना चाहिए।रीडायरेक्ट के माध्यम से फ्लैश हैश को जारी रखने के लिए

+0

डॉक्स फ्लैश करता है [: नोटिस] एक प्रस्तुत करना है न कि रीडायरेक्ट के दौरान दिखाई? क्या आप वाकई मानक लेआउट लोड हो रहे हैं? – EmFi

उत्तर

74

फ्लैश हैश बिल्कुल एक रीडायरेक्ट या प्रस्तुत करने के लिए जारी रहता है। तो आपको डिफ़ॉल्ट सेटिंग्स के साथ ठीक होना चाहिए।

यदि आपको किसी अन्य अनुरोध/रीडायरेक्ट के लिए फ्लैश हैश रखने की आवश्यकता है, तो आप flash.keep पर कॉल कर सकते हैं।

flash.keep # keep the entire flash hash around for an extra request. 
flash.keep(:notice) # keep just flash[:notice] for an extra request. 
+0

क्या कोई संभावित कारण है कि यह हमेशा सत्य नहीं हो सकता है (जैसे सत्र अक्षम किए जा रहे हैं)? यह निश्चित रूप से मेरे उपयोग में मामला नहीं है (फ्लैश [: नोटिस] मानक लेआउट के हिस्से के रूप में प्रदर्शित किया जाना चाहिए, लेकिन यह तब तक दिखाई नहीं दे रहा है जब तक इसे रीडायरेक्ट के विपरीत प्रस्तुत करने से पहले सेट नहीं किया जाता है)। –

+0

क्या होता है जब आप स्पष्ट रूप से फ्लैश [: नोटिस] को संदर्भ में संदर्भित करते हैं? रीडायरेक्ट के बाद – EmFi

+0

? कुछ भी तो नहीं। यदि कोई रीडायरेक्ट शामिल नहीं है, तो मैं उसी स्ट्रिंग को असाइन कर सकता हूं। –

1

कुछ कम से कम रेल में के बारे में पता होना करने के लिए v3.2.1 कि फ़्लैश एक रीडायरेक्ट के माध्यम से बना रहेगा अगर सभी के माध्यम से कम से कम 1 रीडायरेक्ट में अपनी संदर्भित नहीं और बाद में एक ही दृश्य लोड है।

def some_action 

(code that may set a flag to redirect 1 time) 

redirect_to action_path if(redirect_flag) 
.... 
end 

इस रनिंग फ्लैश परिणाम होगा [: संदेश] रीडायरेक्ट की परवाह किए बिना मौजूद होने यह मेरा हाल के अनुभव का एक छद्म कोड है।

def some_action 
logger.debug("Flash[:message] #{flash[:message]}") 

(code that may set a flag to redirect 1 time) 
redirect_to action_path if(redirect_flag) 
.... 
end 

लॉगर रेफरेंसिंग फ्लैश के साथ डीबगिंग के दौरान [] यह तब दिखाई देगा जब रीडायरेक्ट नहीं हुआ था। यदि आप किसी रीडायरेक्ट से पहले फ्लैश का संदर्भ जोड़ते हैं और किसी स्पष्ट कारण के लिए लाइन को खो देते हैं तो मैं इसे समस्याग्रस्त कर सकता हूं।

माणिक देखें यहाँ (Instance protected method: Use at the bottom)

+0

आह, धन्यवाद! मैंने कुछ लॉगिंग जोड़ा था जो अनुरोध स्तर पर फ्लैश को लॉग करता था, और इस बात को भ्रमित कर दिया गया था कि फ्लैश को एकाधिक रीडायरेक्ट के माध्यम से क्यों संरक्षित नहीं किया गया था। ऐसा लगता है कि आप ऐसा कुछ करना चाहते हैं, तो आप 'request.session ['flash']' (कम से कम रेल 4 पर) के माध्यम से फ्लैश पढ़ सकते हैं और यह सामान्य एक्सेसर के माध्यम से नहीं जायेगा, जो कि है सामान्य रूप से संदर्भित फ्लैश को चिह्नित करता है। – Ibrahim

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