2012-07-12 14 views
8

क्या अंदरूनी लेआउट से वर्तमान में प्रस्तुत किए गए दृश्य का नाम प्राप्त करना संभव है?रेल में लेआउट टेम्पलेट से वर्तमान दृश्य नाम कैसे प्राप्त करें?

+0

आप ऐसा क्यों करना चाहते हैं? –

+0

कौन सा रेल है? –

उत्तर

4

मैं सीएसएस नेमस्पेसिंग के लिए कुछ इस तरह किया:

# config/initializers/action_view.rb 
ActionView::TemplateRenderer.class_eval do 

    def render_template_with_tracking(template, layout_name = nil, locals = {}) 
    # with this gsub, we convert a file path /folder1/folder2/subfolder/filename.html.erb to subfolder-filename 
    @view.instance_variable_set(:@_rendered_template, template.inspect.gsub(/(\..*)/, '').split('/')[-2..-1].join('-')) 
    out = render_template_without_tracking(template, layout_name, locals) 
    @view.instance_variable_set(:@_rendered_template, nil) 
    return out 
    end 

    alias_method_chain :render_template, :tracking 
end 


# application.html.erb 
<body class="<%= :@_rendered_template %>" > 
3

विधि active_template_virtual_path विधि निम्नलिखित रूप में एक नाम के रूप में टेम्पलेट रिटर्न "नियंत्रक/कार्रवाई"

class ActionController::Base 
    attr_accessor :active_template 

    def active_template_virtual_path 
    self.active_template.virtual_path if self.active_template 
    end 
end 

class ActionView::TemplateRenderer 

    alias_method :_render_template_original, :render_template 

    def render_template(template, layout_name = nil, locals = {}) 

    @view.controller.active_template = template if @view.controller 
    result = _render_template_original(template, layout_name, locals) 
    @view.controller.active_template = nil if @view.controller 
    return result 

    end 
end 
+0

मेरे लिए काम नहीं करता है। मैं टेम्पलेट में '<% = controller.active_template%>' की कोशिश कर रहा हूं। यह कहता है कि 'अपरिभाषित विधि' active_template'' – Evgenii

+1

<% __FILE__%> आपको वर्तमान टेम्पलेट का नाम देगी – Naveed

+0

यह कहता है: "अनियमित निरंतर एक्शन व्यू :: संकलित टेम्पलेट्स :: फ़ाइल" – user1934428

1

मैं एक ऐसी ही था सवाल। मुझे अपनी आवश्यकता के अनुरूप <%= params[:controller] %> और <%= params[:action] %> मिला, जो कि बॉडी टैग पर कक्षाओं के रूप में नियंत्रक का नाम और क्रिया नाम जोड़ना था।

बस अगर किसी की मदद करता है। :)

3

उपयोग <% __FILE__ %> वर्तमान दृश्य की पूरी फ़ाइल पथ प्राप्त करने के लिए, लेकिन आप केवल कुछ सहायकों

1

लिखे बिना फ़ाइल के भीतर ही से इसका इस्तेमाल मैं वर्तमान में पीटर Ehrlich के का एक संशोधित संस्करण का उपयोग कर रहा कर सकते हैं उपाय। परिणामस्वरूप स्ट्रिंग फॉर्म controller_name/view_name है, उदा। users/new, जिसका अर्थ है कि इसे बाद में render पर सीधे पारित किया जा सकता है, या अन्य उपयोगों के अनुरूप बदल दिया जा सकता है। मैंने रेलवे 4.2 के साथ ही कोशिश की है, हालांकि जहां तक ​​मुझे पता है कि इसे सभी तरह से काम करना चाहिए 3. x es।

ActionView::Base.class_eval do 
    attr_accessor :current_template 
end 

ActionView::TemplateRenderer.class_eval do 
    def render_template_with_current_template_accessor(template, layout_name = nil, locals = {}) 
    @view.current_template = template.try(:virtual_path) 
    render_template_without_current_template_accessor(template, layout_name, locals) 
    end 

    alias_method_chain :render_template, :current_template_accessor 
end 
0

उद्देश्य डीबगिंग के लिए, आप मणि 'current_template' here से उपयोग कर सकते हैं।

यह मणि लॉगफाइल का निरीक्षण करता है और दृश्य/आंशिक टेम्पलेट का फ़ाइल नाम प्रदर्शित करता है।

उदाहरण के लिए:

enter image description here

इसके अलावा, आप बस अपने लेआउट/application.html.erb को यह लाइन

<%= "#{`tail log/development.log`}".scan(/\s[a-z]+\/\S+/) %>

जोड़ सकते हैं।

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