आपको अपनी जेएस या सीएसएस फ़ाइलों को परिसंपत्ति पाइपलाइन के बाहर लोड नहीं करना चाहिए क्योंकि आप महत्वपूर्ण विशेषताओं पर खो देते हैं जो रेल को इतना महान बनाते हैं। और आपको दूसरे रत्न की आवश्यकता नहीं है। मेरा मानना है कि जितना संभव हो उतना कम रत्नों का उपयोग करना चाहिए, और एक मणि का उपयोग करना यहाँ आवश्यक नहीं है।
आप जो चाहते हैं उसे "नियंत्रक विशिष्ट जावास्क्रिप्ट" के रूप में जाना जाता है ("तल पर एक्शन स्पेसिफिक जावास्क्रिप्ट को शामिल किया गया है)। यह आपको एक विशिष्ट कंट्रोलर के लिए एक विशिष्ट जावास्क्रिप्ट फ़ाइल लोड करने की अनुमति देता है। अपने जावास्क्रिप्ट को किसी व्यू से कनेक्ट करने का प्रयास कर रहा है। .. , पीछे की ओर और MVC डिजाइन पैटर्न का पालन नहीं करता है। आप इसे अपने नियंत्रकों या अपने नियंत्रकों के अंदर की क्रियाओं के साथ जोड़ना चाहते हैं।
दुर्भाग्य से, जो भी कारण के लिए, रेल देवों ने फैसला किया कि डिफ़ॉल्ट रूप से, प्रत्येक पृष्ठ आपकी संपत्ति निर्देशिका में स्थित प्रत्येक जेएस फ़ाइल को लोड करेगा। उन्होंने डिफ़ॉल्ट रूप से "नियंत्रक विशिष्ट जावास्क्रिप्ट" को सक्षम करने के बजाय ऐसा करने का फैसला क्यों किया मुझे कभी पता नहीं चलेगा। यह application.js फ़ाइल के माध्यम से किया जाता है, जिसमें डिफ़ॉल्ट रूप से कोड की निम्नलिखित पंक्ति शामिल है:
//= require_tree .
यह एक निर्देश के रूप में जाना जाता है । यह है कि sprockets संपत्ति / javascripts निर्देशिका में हर JS फ़ाइल लोड करने के लिए क्या उपयोग करता है। डिफ़ॉल्ट रूप से, sprockets स्वचालित रूप से application.js और application.css को लोड करता है, और requ_tree निर्देशक अपनी निर्देशिका में हर JS और Coffee फ़ाइल को लोड करता है।
नोट: जब आप मचान (यदि आप मचान नहीं कर रहे हैं, अब शुरू करने के लिए एक अच्छा समय है), तो रफ स्वचालित रूप से आपके लिए एक कॉफी फ़ाइल बनाता है , उस मचान के नियंत्रक के लिए। यदि आप चाहते हैं कि यह कॉफी फ़ाइल के बजाय एक मानक जेएस फ़ाइल उत्पन्न करे , तो अपने जेमफाइल में डिफ़ॉल्ट रूप से सक्षम कॉफी रत्न को हटा दें , और आपका पाड़ इसके बजाय जेएस फाइलें बनाएगा।
ठीक है, इसलिए "कंट्रोलर स्पेसिफिक जावास्क्रिप्ट" को सक्षम करने के लिए पहला कदम है कि आपके एप्लिकेशन से। कोड की आवश्यकता_ट्री कोड को हटा दिया जाए, या यदि आपको अभी भी ग्लोबल जेएस फाइलों की आवश्यकता है, तो इसे अपनी संपत्ति / जावास्क्रिप्ट निर्देशिका के भीतर एक फ़ोल्डर में बदलें। अर्थात:
//= require_tree ./global
चरण 2: अपने कॉन्फ़िगर / इनिशियलाइज़र / एसेट्स.rb फ़ाइल में जाएं, और निम्न जोड़ें:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
इच्छित नाम नियंत्रक डालें।
चरण 3: अपने आवेदन में javascript_include_tag को बदलें। इस के साथ फ़ाइल (पैरामेस [: नियंत्रक] भाग नोट करें:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
अपने सर्वर और वायोला को फिर से शुरू करें! जेएस फाइल जो आपके मचान के साथ उत्पन्न हुई थी, अब केवल उस नियंत्रक को लोड करने पर लोड होगी।
अपने नियंत्रक में एक विशेष कार्रवाई पर एक विशिष्ट जेएस फ़ाइल लोड करने की आवश्यकता है , IE / लेख / नया ? इसके बजाय यह करें:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
कॉन्फ़िगर / इनिशियलाइज़र / एसेट्स ।rb :
config.assets.precompile += %w(*/*)
फिर अपनी संपत्ति / javascripts फ़ोल्डर में नियंत्रक के रूप में एक ही नाम के साथ एक नया फ़ोल्डर जोड़ें और अपनी कार्रवाई के रूप में उसी नाम के साथ अपनी js फ़ाइल डालें। इसके बाद इसे उस विशिष्ट क्रिया पर लोड किया जाएगा।