2010-11-26 7 views
9

मैं कुकी तक पहुंच और उसके बाद कार्रवाई या नियंत्रक की परवाह किए बिना एक ही कार्रवाई करने के लिए चाहते हैं से कुकीज़ का उपयोग करने की।कैसे ApplicationController (रेल)

मैं एक विधि मेरी असंख्य कार्रवाई तरीकों में से प्रत्येक से बुलाया जाता है, क्योंकि एक तरफ एक दर्द होने के अलावा, यह बहुत चुस्त कोड के लिए नहीं है को लिखने के लिए नहीं करना चाहती। मैं application_controller.rb में एप्लिकेशन कंट्रोलर क्लास (सभी नियंत्रक कक्षाओं के लिए सुपरक्लास) से अपनी कुकी-हैंडलिंग विधि को कॉल करना चाहता हूं।

हालांकि, ApplicationController वर्ग के शरीर में cookies() बुला एक 'अपरिभाषित विधि' त्रुटि को जन्म देती है। (मुझे लगता है कि cookies बाद में परिभाषित नहीं किया गया है।)

मैं क्या कर सकता हूं? क्या मुझे एप्लिकेशन नियंत्रक की initialize() विधि को ओवरराइट करना चाहिए और वहां से मेरी कुकी-हैंडलिंग विधि को कॉल करना चाहिए? यदि हां, तो मुझे सुपर कन्स्ट्रक्टर को तर्क कैसे पारित करना चाहिए?

पीएस मैं रेल 2.3.5

उत्तर

7

यह आप के लिए काम कर सकते हैं:

class ApplicationController 
    before_filter :handle_cookies 
    def handle_cookies 
    # Do whatever it is you want to do with your cookies 
    end 
end 

before_filter विधिके बाद जो भी subroutine इंगित करता है उसे कॉल करेगा (:handle_cookies) 0 हैश में संकलित किया गया है। इस कोड को आपके एप्लिकेशन नियंत्रक में जोड़ना मतलब होगा कि अन्य सभी नियंत्रक इसे प्राप्त करते हैं और एक ही कार्य करेंगे।

2

यह एक हैश, न कि एक विधि है उपयोग कर रहा हूँ:

cookies[:some_key] 

... के बजाय:

cookies(:some_key) 
+1

धन्यवाद। लेकिन क्या यह वास्तव में एक तरीका नहीं है जो हैश लौटाता है? 'कुकीज़ [: कुंजी]' कुकीज़() के लिए वास्तव में लघुरूप है [: key] '? भले ही, क्या आप मुझे समाधान ढूंढने में मदद कर सकते हैं? 'कुकीज़' को कॉल करना और हैश की अपेक्षा करना उस त्रुटि से नहीं बचता जो मैं पहले प्राप्त कर रहा था। – JellicleCat

+0

यह एक तरीका है जो कुकीज ऑब्जेक्ट (जो हैश से विरासत में आता है) देता है। आप वास्तव में क्या करने की कोशिश कर रहे हैं कि आपको विधि तक पहुंचने की आवश्यकता है, न कि कुकी डेटा? – markquezada

+1

मैं कुकी डेटा के बाद हूं। समस्या यह है कि इसे प्रत्येक क्रिया से कॉल किए बिना इसे कैसे पहुंचाया जाए। (मैं सुपरक्लास से इसे कैसे एक्सेस कर सकता हूं, उदाहरण के लिए, इसे नियंत्रक के भीतर किसी विधि से कॉल किए बिना?) – JellicleCat

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