2009-09-20 7 views

उत्तर

61

हाँ, आप कर सकते हैं। आपको बस सहायक फ़ाइल की आवश्यकता होती है और उसके बाद उस सहायक को अपनी रेक फ़ाइल के अंदर शामिल करें (जो वास्तव में एक सहायक एक मिश्रण है जिसे हम शामिल कर सकते हैं)।

module ApplicationHelper 
    def hi 
    "hi" 
    end 
end 

इसलिए यहाँ मेरी रेक फ़ाइल की सामग्री है:

require "#{Rails.root}/app/helpers/application_helper" 
include ApplicationHelper 

namespace :help do 
    task :hi do 
    puts hi 
    end 
end 

और यहाँ

उदाहरण के लिए, यहाँ मैं एक application_helper फ़ाइल एप्लिकेशन/सहायकों के अंदर निर्देशिका है कि इस में शामिल है मेरे टर्मिनल पर परिणाम है:

god:helper-in-rake arie$ rake help:hi 
hi 
+3

सावधान रहें, रेक के भीतर 'शामिल' का उपयोग करके सावधान रहें, आप अनजाने में 'ऑब्जेक्ट' के दायरे को प्रदूषित करते हैं, जो बाद में आयातित रेक कार्यों को समान तरीकों को साझा करने के लिए सफल होता है। – lfender6445

+1

बाद में आयातित रेक कार्यों से आपका क्या मतलब है? जैसा कि अन्य। रेक फ़ाइलों से रेक कार्यों में भी एप्लीकेशनहेल्पर विधियों तक पहुंच होगी? –

+0

यह कहा गया है और कहा गया है, लेकिन इसे पर्याप्त नहीं कहा जा सकता है ... आप * वास्तव में * ऐसा नहीं करना चाहिए, खासकर एक रेल ऐप (जो बड़े पैमाने पर रेक का उपयोग करते हैं) में नहीं करना चाहिए। यह वैश्विक 'ऑब्जेक्ट' के साथ गड़बड़ करता है, जिसमें दूरगामी प्रभाव हो सकते हैं जो ट्रैक करना बेहद मुश्किल हो सकता है। बस इस पर दो घंटे खो गए ... – nrser

10

जैसा कि lfender6445 ने उल्लेख किया है, include ApplicationHelper का उपयोग करके, एरी के उत्तर में, आपके कार्यों वाले शीर्ष-स्तरीय दायरे को प्रदूषित करने जा रहा है।

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

सबसे पहले, हमें app/helpers में हमारे कार्य सहायकों को रखना चाहिए। Codefol.io पर "Where Do I Put My Code?" से उद्धरण के लिए:

रेल "सहायक" बहुत मददगार हैं। वे स्वचालित रूप से विचारों में शामिल होते हैं, लेकिन नियंत्रकों या मॉडल में नहीं। यह उद्देश्य पर है।

चूंकि app/helpers देखने में मदद करने वालों के लिए है, और रेक कार्य नहीं हैं, हमें अपने कार्य सहायकों को कहीं और रखना चाहिए। मैं lib/task_helpers की अनुशंसा करता हूं।

lib/task_helpers/application_helper.rb में:

module ApplicationHelper 
    def self.hi 
    "hi" 
    end 
end 

अपने Rakefile में या lib/tasks में एक .rake फ़ाइल:

require 'task_helpers/application_helper' 

namespace :help do 
    task :hi do 
    puts ApplicationHelper.hi 
    end 
end 

मुझे यकीन है कि अगर सवाल मूल रूप से रेक कार्यों में दृश्य सहायकों सहित के बारे में पूछ रहा था नहीं हूँ, या रेक कार्यों के लिए बस "सहायक तरीके"। लेकिन दोनों विचारों और कार्यों में एक सहायक फ़ाइल साझा करना आदर्श नहीं है। इसके बजाय, उन मददगारों को लें जिन्हें आप दोनों दृश्यों और कार्यों में उपयोग करना चाहते हैं, और उन्हें एक अलग निर्भरता में ले जाएं जो एक दृश्य सहायक में और एक कार्य सहायक में शामिल है।

+1

यह मेरे लिए हल हो गया - यदि आप सहायक विधि के लिए तर्क पारित करना चाहते हैं, तो आप इसे तब तक करने में असमर्थ होंगे जब तक आप –

+0

किए गए दायरे को सॉर्ट नहीं करते अगर इसे 'application_helper' कहने का अच्छा विचार है।आरबी' क्योंकि यह भ्रम पैदा कर सकता है। शायद बस 'lib/task_helpers.rb' बेहतर होगा। –

+0

यह अच्छा और सुरक्षित तरीका है ... धन्यवाद .... – prasanthrubyist

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