2010-06-05 9 views
24

यह एक बहुत ही सरल रेल प्रश्न होना चाहिए। मेरे पास निम्न जैसा चर है।सभी नियंत्रक कार्यों में रेल परिवर्तनीय

@administration = Administration.first 

मैं तो उदाहरण के लिए अगर मैं एक उत्पाद नियंत्रक है इस चर मेरे सभी नियंत्रकों भर में हर नियंत्रक कार्रवाई के माध्यम से सुलभ होना चाहते हैं और इसके अंदर मैं हमेशा की तरह CRUD कार्रवाई है, मैं @administration चर के रूप में परिभाषित चाहते सभी सीआरयूडी कार्यों में डाल दिया जाएगा। (इसे नष्ट या बनाने या अपडेट करने की आवश्यकता नहीं होगी)। मैं अपने प्रोजेक्ट में कई नियंत्रकों है और अगर वहाँ कार्रवाई है कि मैं इसे में चाहते हैं सभी के माध्यम से मैन्युअल रूप से इसे जोड़ने से एक आसान तरीका है मैं सोच रहा था।

मैं एक वैश्विक चर की कोशिश की

$administration = Administration.first 

लेकिन मैं जब मैं प्रशासन की वास्तविक सामग्री को अद्यतन करता हूं तो यह एक समस्या में चलाया जाता है जहां इसे अद्यतन नहीं किया जाता है। पहली तालिका। इसके अलावा, मैं वैश्विक चर से बचना चाहता हूं।

किसी भी मदद की बहुत सराहना की जाएगी। धन्यवाद! :)

उत्तर

65

आप अपने एप्लिकेशन नियंत्रक को पहले_फिल्टर जोड़ सकते हैं जो किसी भी क्रिया को कॉल करने से पहले प्रशासन चर सेट करता है और आप इसे केवल आवश्यक क्रियाओं तक सीमित कर सकते हैं।

class ApplicationController < ActionController::Base 
... 
before_filter :set_admin 
def set_admin 
    @administration = Administration.first 
end 
.. 

http://api.rubyonrails.org/v2.3.8/classes/ActionController/Filters/ClassMethods.html

+0

बहुत बढ़िया है, की मदद के लिए धन्यवाद। – AustinT

+0

क्या इसे क्रियाओं में साझा करने के लिए एक @instance चर होना चाहिए? – Qasim

15

क्रिस्टोस पद बस का विस्तार ...

आप @administration, नष्ट बना सकते हैं और अद्यतन नियंत्रक क्रियाएँ तो जोड़ने के लिए सुलभ होने के लिए नहीं करना चाहते हैं: को छोड़कर =>: कार्रवाई इस तरह before_filter रहे हैं:

before_filter :set_admin, :except => [:create, :update, :destroy]

रेल 4 और 5 before_filter यह पदावनत है। सिवाय set_admin,:: आप बजाय इसका उपयोग कर सकते हैं:

before_action [: बनाते हैं, तो: अद्यतन,: नष्ट]

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