2009-03-11 14 views
8

उत्पन्न करते समय एक रेल टेम्पलेट के अंदर से ऐप का नाम एक्सेस करना मैं रेल 2.3 टेम्पलेट्स के साथ गड़बड़ कर रहा हूं और ऐप नाम को मेरे टेम्पलेट के अंदर एक चर के रूप में उपयोग करने में सक्षम होना चाहता हूं, इसलिए जब मैं उपयोग करता हूं ...
rails appname -m path/to/template.rb
... मैं template.rb के अंदर appname तक पहुंचने में सक्षम होना चाहता हूं। क्या कोई जानता है कि इसे कैसे करना है?
धन्यवादरेल ऐप

उत्तर

8

उत्तर के लिए धन्यवाद। माइक वुडहाउस, आप बहुत करीब थे। पता चला है, तुम सब के अंदर अपने रेल टेम्पलेट है से APPNAME तक पहुंच की क्या करने की जरूरत ...

@root.split('/').last 

@root चर जब आरंभ टेम्पलेट्स बनाया पहली बात है और अपने पटरियों टेम्पलेट्स के अंदर उपलब्ध है। RAILS_ROOT काम नहीं करता है।

1

RAILS_ROOT आपको अपनी रूट निर्देशिका का पूर्ण पथ देगा। आपका ऐप नाम अंतिम '/' के बाद स्ट्रिंग का हिस्सा होगा जिसे आप किसी भी तरीके से पकड़ सकते हैं।

संपादित करें: काम पूरा करने के लिए पर्याप्त नहीं है। माइक और दान इसे नीचे लोहा।

3

वहाँ शायद एक और अधिक सरल तरीका है, लेकिन यह काम करने के लिए लगता है:

RAILS_ROOT.split('/').last 

संपादित करें: Bleah - इस बार मतदान किया गया था, और मतदाता सही था। अगर मैं प्रश्न को अधिक सावधानीपूर्वक पढ़ूंगा, तो मैंने 2.3 और टेम्पलेट.आरबी तत्वों को देखा होगा। क्षमा याचना।

मुझे संदेह है कि इस बिंदु पर RAILS_ROOT नहीं बनाया गया है कि आपको ऐप नाम की आवश्यकता है। - मुझे पता नहीं था कि मैं इंस्टा सकता

app_path = ARGV.first 

यह एक chdir और फ्रीज अनुमति देने के लिए स्क्रिप्ट के अंत में प्रयोग किया जाता है के लिए किया जाना अगर जरूरत: ruby\lib\ruby\gems\1.8\gems\rails-2.2.2\bin\rails को देखते हुए, हालांकि, लगभग पहली बात यह है कि क्या होता है यह है - सृजन पर क्षमा करें, इसलिए मैंने कम से कम कुछ नया सीखा। ARGV तो यहाँ इस्तेमाल किया जाता है:

Rails::Generator::Scripts::Generate.new.run(ARGV, :generator => 'app') 

जो जल्दी से जगह है जहाँ ARGV वास्तव में नियंत्रित किया जाता है करने के लिए हमें हो जाता है:

rails-2.3.1\lib\rails_generator\scripts.rb 

जहां मैं यहाँ नीचे देखें

Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke! 

कहीं शायद जहां है templating संभाला जाता है। मुझे डर है कि मैं 2.3 के साथ बहुत शुरुआती चरण में हूं और templating एक ऐसा क्षेत्र है जिसे मैंने अभी तक नहीं देखा है।

क्या इससे मेरे पहले प्रयास से बेहतर मदद मिलती है?

0

मेरा मानना ​​है कि अब पसंदीदा तरीका है Rails.root को कॉल करना और RAILS_ROOT नहीं। स्पष्ट रूप से ग्रह रेलों पर किसी को अपरकेस या कुछ समान कारणों के लिए एक उलटा है। 2.3.5 के रूप में वे दोनों काम करने लगते हैं।

15

मैं इस प्रश्न का उत्तर ढूंढ रहा था। दुर्भाग्य से उपर्युक्त उत्तर (@root) रेल 3 में काम नहीं कर रहा है।

यहाँ चर आप रेल में 3 एप्लिकेशन टेम्पलेट्स (और भी आसान) का उपयोग कर सकते है:

@app_name 
@app_path 
0

मैं त्रुटि हो रही थी

`template': undefined local variable or method `app_name' 

माणिक 1.9.2p290, 3.2.11 रेल, थोर 0.18.0, विंडोज

लेकिन साथ रेल 2.3 जनरेटर:

class DynanavGenerator < Rails::Generators::Base 

(कर सकते हैं यह सुनिश्चित नहीं है कि यह त्रुटि रेल 3.0.9 या उससे पहले के अंतर्गत हुई थी) वर्ग परिभाषा को बदलना:

class DynanavGenerator < Rails::Generators::NamedBase 

जो तब दिया:

आवश्यक तर्क 'नाम'

मैं तो एक 'नाम' ("कुछ" नीचे) जोड़ा के लिए प्रदान की कोई मान नहीं:

rails generate dynanav something --force 

जिसने मूल त्रुटि दी, इसलिए मैंने जोड़ा:

def app_name 
    @name.titleize 
end 
कक्षा में

और सभी ठीक थे।

3

मैं एक ऐसी ही समस्या में पड़ गए, ऊपर सूचीबद्ध चर में से कोई भी उपलब्ध मेरे लिए रेल 4. मैंने पाया कि @name उपलब्ध था में जबकि

चल
rails plugin new engines/dummy -m my_template.rb 

टेम्पलेट के भीतर से अन्य उपयोगी उपलब्ध चर रहे हैं थे । आप अपने लिए देख सकते हैं और pry का उपयोग करके चारों ओर खेल सकते हैं। मेरे टेम्पलेट के अंदर मैं

require 'pry'; binding.pry 

जोड़ा और फिर ls दौड़ा उपलब्ध उदाहरण चरों की सूची

ls -i 
instance variables: 
    @_initializer   @app_path @behavior @destination_stack @extra_entries @name   @output_buffer @shell 
    @_invocations   @args  @builder @dummy_path   @gem_filter  @options  @rails_template @source_paths 
    @after_bundle_callbacks @author @camelized @email    @in_group  @original_name @shebang 
+0

इस उत्तर समय सबूत है दिखाने के लिए, शीर्ष से एक होना चाहिए –

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