ruby on rails सभी रेलवे सहायक सभी विचारों के लिए हर समय उपलब्ध क्यों हैं? क्या इसे अक्षम करने का कोई तरीका है?




ruby-on-rails helpers (4)

मैं एक अलग नियंत्रक के विचारों में एक नियंत्रक के लिए सहायक तरीकों का उपयोग क्यों कर सकता हूं? हैकिंग / पैचिंग रेल के बिना इसे अक्षम करने का कोई तरीका है?


@ जॉर्ज Schreiber की विधि रेल 3.1 के रूप में काम नहीं करता है; कोड काफी बदल गया है।

हालांकि, अब इस सुविधा को रेल 3.1 में अक्षम करने का एक बेहतर तरीका है (और उम्मीद है कि बाद में)। अपनी config / application.rb में, इस पंक्ति को जोड़ें:

config.action_controller.include_all_helpers = false

यह एप्लिकेशन कंट्रोलर को सभी सहायकों को लोड करने से रोक देगा।

(रुचि रखने वाले किसी भी व्यक्ति के लिए, यहां पुल अनुरोध है जहां सुविधा बनाई गई थी ।)


जवाब रेल संस्करण पर निर्भर करता है।

रेल> = 3.1

include_all_helpers कॉन्फ़िगरेशन को किसी भी वातावरण में false में बदलें जहां आप कॉन्फ़िगरेशन लागू करना चाहते हैं। यदि आप कॉन्फ़िगरेशन को सभी परिवेशों पर लागू करना चाहते हैं, तो इसे application.rb में बदलें।

config.action_controller.include_all_helpers = false

झूठी होने पर, यह समावेशन को छोड़ देगा।

रेल <3.1

ApplicationController से निम्न पंक्ति हटाएं

helper :all

इस तरह प्रत्येक नियंत्रक अपने स्वयं के हेल्पर्स लोड करेगा।


दरअसल रेल 2 में , एक्शनकंट्रोलर :: बेस की डिफ़ॉल्ट कार्यक्षमता सभी सहायकों को शामिल करना था।

02/24/07 20:33:47 (3 साल पूर्व) पर परिवर्तन 6222 : इसे एक डिफ़ॉल्ट धारणा बनाएं कि आप सभी सहायकों को चाहते हैं, हर समय (हाँ, हाँ)

परिवर्तन:

class ApplicationController < ActionController::Base 
  helper :all # include all helpers, all the time 
end 

रेल 3 बीटा 1 के रूप में, यह अब चेंजलॉग में उल्लेखनीय मामला नहीं है:

  • जोड़ा गया कि ActionController :: बेस अब सहायक है: इसे करने के लिए रेल में डिफ़ॉल्ट अनुप्रयोग नियंत्रक पर भरोसा करने के बजाय सभी [DHH]

रेल 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 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




helpers