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)
它将返回当前使用的布局名称
小智 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)
| 归档时间: |
|
| 查看次数: |
8569 次 |
| 最近记录: |