2012-07-12 35 views

Trả lời

4

tôi đã làm một cái gì đó như thế này cho css namespacing:

# 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

Phương pháp phương pháp active_template_virtual_path trả về mẫu như một tên trong các hình thức sau đây "điều khiển/hành động"

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

Không hoạt động cho tôi. Tôi đang cố gắng để '<% = controller.active_template%>' trong mẫu. Nó nói 'phương thức chưa xác định' active_template'' – Evgenii

+1

<% __FILE__%> sẽ cho bạn biết tên mẫu hiện tại – Naveed

+0

Điều này nói: "ActionView :: Uniledialized :: FILE" – user1934428

1

Tôi đã có một tương tự câu hỏi. Tôi tìm thấy <%= params[:controller] %><%= params[:action] %> cho phù hợp với nhu cầu của tôi, đó là thêm tên bộ điều khiển và tên hành động làm các lớp trên thẻ body.

Chỉ trong trường hợp giúp mọi người. :)

3

Sử dụng <% __FILE__ %> để có được những đường dẫn tập tin đầy đủ về quan điểm hiện tại, nhưng bạn chỉ có thể sử dụng nó từ trong tập tin riêng của mình mà không cần viết một số người giúp đỡ

1

Tôi hiện đang sử dụng một phiên bản sửa đổi của Peter Ehrlich của dung dịch. Chuỗi kết quả có dạng là controller_name/view_name, ví dụ: users/new, có nghĩa là nó có thể được chuyển trực tiếp đến render sau này hoặc được thay đổi để phù hợp với các mục đích sử dụng khác. Tôi đã chỉ thử điều này với Rails 4,2, mặc dù theo như tôi biết nó nên làm việc tất cả các cách trở lại vào 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

Vì mục đích gỡ lỗi, bạn có thể sử dụng gem 'current_template' từ here.

Đá quý này kiểm tra tệp nhật ký và tên tệp hiển thị của chế độ xem/mẫu từng phần.

Ví dụ:

enter image description here

Ngoài ra, bạn có thể chỉ cần thêm dòng này

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

để bố trí của bạn/application.html.erb.

Các vấn đề liên quan