मैं एक अलग नियंत्रक के लिए विचारों में एक नियंत्रक के लिए सहायक विधियों का उपयोग क्यों कर सकता हूं? क्या हैकिंग / पैचिंग के बिना इसे निष्क्रिय करने का एक तरीका है?
जवाबों:
@ जॉर्ज शेइबर का तरीका रेल 3.1 के रूप में काम नहीं करता है; कोड काफी बदल गया है।
हालाँकि, रेल 3.1 में इस सुविधा को अक्षम करने का एक और बेहतर तरीका है (और बाद में उम्मीद है)। अपने config / application.rb में, यह पंक्ति जोड़ें:
config.action_controller.include_all_helpers = false
यह ApplicationController को सभी सहायकों को लोड करने से रोक देगा ।
(जो रुचि रखते हैं, उनके लिए यहां अनुरोध अनुरोध है जहां सुविधा बनाई गई थी ।)
उत्तर रेल संस्करण पर निर्भर करता है।
उस include_all_helpers
कॉन्फ़िगरेशन को false
किसी भी वातावरण में बदलें जहाँ आप कॉन्फ़िगरेशन लागू करना चाहते हैं। यदि आप चाहते हैं कि सभी वातावरणों पर लागू होने वाला विन्यास इसे बदल दें application.rb
।
config.action_controller.include_all_helpers = false
झूठे होने पर, यह समावेश को छोड़ देगा ।
निम्न पंक्ति को हटाएं ApplicationController
helper :all
इस तरह प्रत्येक नियंत्रक अपने स्वयं के सहायकों को लोड करेगा।
include HelperName
अपने ApplicationHelper के शीर्ष पर जोड़ सकते हैं ।
रेल 3 में, actioncontroller/base.rb
(लाइन 224 के आसपास):
def self.inherited(klass)
super
klass.helper :all if klass.superclass == ActionController::Base
end
तो हां, यदि आप अपनी कक्षा से प्राप्त करते हैं, तो ActionController::Base
सभी सहायकों को शामिल किया जाएगा।
इसके आसपास आने के लिए, अपने नियंत्रक कोड की शुरुआत में clear_helpers
( AbstractClass::Helpers
; शामिल किया गया ActionController::Base
) कॉल करें । Clear_helpers के लिए स्रोत कोड टिप्पणी:
# Clears up all existing helpers in this class, only keeping the helper
# with the same name as this class.
उदाहरण के लिए:
class ApplicationController < ActionController::Base
clear_helpers
...
end
clear_helpers
करते हैं (प्रदर्शन) क्षति पहले से ही हो चुकी है क्योंकि सभी सहायकों को लोड किया गया है। आप वास्तव में उपयोग करना चाहते हैं config.action_controller.include_all_helpers = false
(जैसा कि @ क्रैग वाकर स्टेट्स, ऊपर), क्योंकि यह मदद करने वालों को पहली बार में लोड होने से रोकता है, इस प्रकार आपको कुछ प्रदर्शन प्राप्त करना (शायद विकास मोड में सबसे महत्वपूर्ण रूप से)। actioncontroller/base.rb
स्निपेट को शामिल करने के लिए धन्यवाद ; कोड को देखना और रहस्य को दूर करना हमेशा अच्छा होता है।
clear_helpers
अभी भी रेल के लिए उपयोगी है 3.0 - config.action_controller.include_all_helpers = false
केवल रेल है 3.1 और इसके बाद के संस्करण।
वास्तव में रेल 2 में , ActionController :: Base की डिफ़ॉल्ट कार्यक्षमता सभी सहायकों को शामिल करने के लिए थी।
Chanhet 6222 on 02/24/07 20:33:47 (3 साल पहले) dhh द्वारा : इसे एक डिफ़ॉल्ट धारणा बना लें कि आप सभी सहायकों को हर समय चाहते हैं (हाँ, हाँ)
परिवर्तन:
class ApplicationController < ActionController::Base
helper :all # include all helpers, all the time
end
रेल 3 बीटा 1 के रूप में, अब ऐसा नहीं है जैसा कि CHANGELOG में नोट किया गया है: