2012-07-12 12 views

Antwort

4

ich so etwas für CSS Namespacing tat

# 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

Verfahren active_template_virtual_path Methode liefert die Vorlage als Name in der folgenden Form "controller/action"

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

Funktioniert nicht für mich. Ich versuche zu <% = controller.active_template%> in der Vorlage. Es heißt 'undefined Methode' active_template'' – Evgenii

+1

<% __FILE__%> gibt Ihnen den Namen der aktuellen Vorlage – Naveed

+0

Das sagt: "nicht initialisierte Konstante ActionView :: CompiledTemplates :: FILE" – user1934428

1

hatte ich ein ähnliches Frage. Ich fand <%= params[:controller] %> und <%= params[:action] %>, um meinem Bedarf zu entsprechen, der war, den Kontrollernamen und den Tätigkeitsnamen als Klassen auf dem body-Tag hinzuzufügen.

Nur für den Fall, dass jemand hilft. :)

3

Verwenden <% __FILE__ %> um den vollständigen Dateipfad der aktuellen Ansicht, aber man kann es nur von innerhalb die Datei selbst verwenden, ohne einige Helfer schreiben

1

Ich bin derzeit eine modifizierte Version von Peter Ehrlich mit Lösung. Die resultierende Zeichenfolge hat die Form controller_name/view_name, z. users/new, was bedeutet, dass es später direkt an render übergeben oder für andere Zwecke geändert werden kann. Ich habe das nur mit Rails 4.2 probiert, obwohl ich soweit weiß, dass es bis in die 3. x es funktionieren sollte.

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

Zum Zwecke der Fehlersuche können Sie gem 'current_template' von here verwenden.

Dieses Schmuckstück prüft die Logdatei und zeigt den Dateinamen der Ansicht/Teilvorlage an.

Zum Beispiel:

enter image description here

Sie können aber auch einfach diese Zeile hinzufügen

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

zum Layout/application.html.erb.

Verwandte Themen