Rails3在视图中获取当前布局名称

xpe*_*int 13 layout views ruby-on-rails-3

我有Rails 2.X的答案但不适用于Rails 3.如何读取视图中呈现的当前布局的名称.

我的Rails2问题:Rails布局名称在视图中

谢谢.

小智 17

在Rails 3.2中使用它比以前概述的要复杂一些.如果你的控制器显式声明了一个布局,那么结果controller.send(:_layout)是一个String,否则它就是一个ActionView :: Template.试试这个:

module ApplicationHelper
  def current_layout
    layout = controller.send(:_layout)
    if layout.instance_of? String
      layout
    else
      File.basename(layout.identifier).split('.').first
    end
  end
end
Run Code Online (Sandbox Code Playgroud)


小智 6

对于Rails 4:

controller.send(:_layout)
=> 'application'     
Run Code Online (Sandbox Code Playgroud)

对于Rails 3.2:

controller.send(:_layout)
=> #<ActionView::Template:0x000000082bb788> 
Run Code Online (Sandbox Code Playgroud)

controller.send(:_layout).identifier返回完整路径:

/home/davidm/Documentos/Devel/myapp/app/views/layouts/application.haml
Run Code Online (Sandbox Code Playgroud)


小智 5

我认为它应该是核心,但是现在您可以创建一个辅助方法:

 def current_layout
    controller.send :_layout
  end
Run Code Online (Sandbox Code Playgroud)

它将返回当前使用的布局名称

  • 如果您不手动渲染这样的布局,则为true:render:layout =&gt;'application'。 (3认同)

小智 5

在铁轨5

这对我有用:

def current_layout
  layout = controller.class.send(:_layout)
  if layout.nil?
    default_layout
  elsif layout.instance_of? String or layout.instance_of? Symbol
    layout
  else
    File.basename(layout.identifier).split('.').first
  end
end
Run Code Online (Sandbox Code Playgroud)