2016-10-31 13 views
18

मैं रेल रत्न में अपने नियंत्रक में गतिशील पथ का उपयोग करना चाहता हूं।रेल 4 + append_view_path

मैं

module MyGem 
    class FooController < Config.controller 
    before_action ->{ append_view_path "app/views/my_gem/#{wizard_name}" } 
... 

करने और विचारों में जोड़ दिया है मैं निर्दिष्ट करने के लिए पथ की तरह

app/views/my_gem/#{wizard_name}/my_gem/foo/some.erb 

किसी तरह रेल में है, मणि नाम स्थान के रिश्तेदार पथ कटौती करने के लिए, और देखने मिल की जरूरत है रास्ता पसंद है?

app/views/my_gem/#{wizard_name}/some.erb 
# or 
foo/bar/some.erb 

धन्यवाद!

युपीडी:

मैं समझता हूँ, है कि वहाँ Engine में isolate_namespace अक्षम करने के साथ जिस तरह से है, लेकिन मुझे विश्वास है, कि यह नहीं सबसे अच्छा और एकमात्र विकल्प है।

UPD2: Rails4 के लिए इस विचार बहुत उपयोगी https://coderwall.com/p/p_yelg/render-view-outside-of-a-controller-in-rails-4

+3

मुझे समझ में आता है कि आप वास्तव में क्या चाहते हैं। क्या आप कृपया अपने विचारों का उदाहरण दे सकते हैं? –

+0

सामग्री देखें इस सवाल में कोई फर्क नहीं पड़ता, प्रश्न केवल दृश्य लुकअप पथ के बारे में है। –

+0

तो, आपका 'view_paths' कैसा दिखता है, यह कैसा दिखना चाहिए, और यह' isolate_namespace' का उपयोग करने के बाद कैसा दिखता है? –

उत्तर

0

आप बना सकता था अपने कैसे विधि है कि एक मनमाना फ़ाइल पढ़ता है, ERB व्याख्या और उदाहरण के लिए एक HTML पृष्ठ के रूप में यह प्रस्तुत करना प्रस्तुत करना।

ERB.new(File.read(Rails.root.join('foo', bar', 'some.erb'))).result(binding) 

binding में उत्तीर्ण होकर, टेम्पलेट वर्तमान संदर्भ में सभी चर के लिए उपयोग होगा।

अधिक जानकारी के लिए ERB देखें डॉक्स: http://apidock.com/ruby/ERB

0

अपने मणि मान लिया जाये कि एक इंजन है, तो आप बस इंजन में render :some कॉल करने के लिए सक्षम होना चाहिए। यदि ऐप में <gem_name>/<controller_name>/some.html.erb नामक दृश्य है, तो इसका उपयोग किया जाएगा।

इसके अलावा, आप अपने मणि में उस दृश्य का एक संस्करण प्रदान कर सकते हैं जिसका उपयोग तब किया जाएगा जब ऐप अभी तक एक प्रदान नहीं करता है।

यदि आपको wizard_name की भी आवश्यकता है, तो मुझे लगता है कि ऐसा करने का सबसे अच्छा तरीका दृश्य पथ के उस हिस्से को उस अंत तक ले जाना होगा जहां आप रेंडर कर रहे हैं।

तो अपने मणि के नियंत्रक में आप render "#{wizard_name}/some" लिखेंगे और यह हमारे ऐप के app/views/<gem_name>/<controller_name>/<wizard_name>/some.html.erb और आपके मणि के app/views/<controller_name>/<wizard_name>/some.html.erb दोनों में उस दृश्य को देखेंगे।