2010-10-20 13 views
13

मैं अपने रेल 3 एप्लिकेशन में नियंत्रक के बाहर एक टेम्पलेट प्रस्तुत नहीं कर सकता। मैंने जो गुगल किया है वह सहायक रहा है, और अंततः मुझे http://www.swombat.com/rails-rendering-templates-outside-of-a-contro पर कुछ उपयोगी जानकारी मिली। हालांकि, यह रेल 3 में टूटा हुआ प्रतीत होता है। क्या किसी के पास कोई विचार है कि मैं इस विधि को कैसे ठीक कर सकता हूं या शायद बेहतर दृष्टिकोण के बारे में जानता हूं?मैं रेल 3 में नियंत्रक के बाहर टेम्पलेट कैसे प्रस्तुत कर सकता हूं?

मेरे विधि:

def render_erb(template_path, params) 
    view = ActionView::Base.new(ActionController::Base.view_paths, {}) 

    class << view 
    include ApplicationHelper 
    end 

    view.render(:file => "#{template_path}.html.erb", :locals => params) 
    end 

त्रुटि:

ActionView::Template::Error: ActionView::Template::Error 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/whiny_nil.rb:48:in `method_missing' 
    from /Users/mikegerstenblatt/Desktop/bluetrain/lib/test.html.erb:17:in `_lib_test_html_erb__366962844_2173671680_68830' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/template.rb:135:in `send' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/template.rb:135:in `render' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/notifications.rb:54:in `instrument' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/template.rb:127:in `render' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/render/rendering.rb:59:in `_render_template' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/notifications.rb:52:in `instrument' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/notifications/instrumenter.rb:21:in `instrument' 
    from /Library/Ruby/Gems/1.8/gems/activesupport-3.0.0/lib/active_support/notifications.rb:52:in `instrument' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/render/rendering.rb:56:in `_render_template' 
    from /Library/Ruby/Gems/1.8/gems/actionpack-3.0.0/lib/action_view/render/rendering.rb:26:in `render' 
    from /Users/mikegerstenblatt/Desktop/bluetrain/app/models/generated_website.rb:45:in `render_erb' 
    from (irb):2 

उत्तर

7

मैं एक blog post और एक gist कि यह बताता है बनाया है।

अनिवार्य रूप से आप ऐसा करने की जरूरत है:

class HelloWorldController < AbstractController::Base 
    include AbstractController::Rendering 
    include AbstractController::Layouts 
    include AbstractController::Helpers 
    include AbstractController::Translation 
    include AbstractController::AssetPaths 
    include ActionController::UrlWriter 

    self.view_paths = "app/views" 

    def show; end 
end 

और उसके बाद:

HelloWorldController.new.show 

एक स्ट्रिंग को प्रदान की गई दृश्य वापस आ जाएगी।

+4

अपने ब्लॉग पोस्ट को 404 – nocache

+1

यहाँ सही ब्लॉग लिंक है: http://www.amberbit.com/blog/2011/12/27/render-views-and-partials-outside-controllers-in-rails- 3/ –

+0

रेल 4 के लिए, मुझे एक्शन व्यू :: लेआउट्स के लिए एक जोड़ जोड़ना पड़ा: "एक्शन व्यू :: लेआउट्स" शामिल करें। – Dushyanth

4

हबर्ट द्वारा सुझाए गए दृष्टिकोण से बिल्डिंग, मैंने अपनी रेल 3.1 परियोजना में निम्नलिखित के साथ समाप्त किया।

मैं एक सामान्य दृश्य में एक आंशिक रेंडर करने के लिए है और यह भी एक परिसंपत्ति में उसका फिर से उपयोग (एप्लिकेशन के तहत/आस्तियों/javascripts)

<% 
class FauxController < AbstractController::Base 
    include AbstractController::Rendering 
    # I didn't need layouts, translation or assetpaths, YMMV 
    include AbstractController::Helpers 
    include Rails.application.routes.url_helpers 
    helper MyHelper # the partial references some helpers in here 

    # Make sure we can find views: 
    self.view_paths = Rails.application.config.paths["app/views"] 

    def show 
    render :partial => "/my_controller/my_partial.js" 
    end 
end 

%> 
<%= FauxController.new.show %> 
+0

उस – mhenrixon

6

आप render_anywhere मणि का उपयोग कर सकते नियंत्रक के बाहर टेम्पलेट रेंडर करने के लिए की जरूरत । https://github.com/yappbox/render_anywhere

+2

के लिए धन्यवाद सत्यापित है कि यह मणि रेल 4 में भी काम करता है। – cfeduke

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

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