特定操作的渲染布局
Posted
技术标签:
【中文标题】特定操作的渲染布局【英文标题】:Rendering Layout for specific actions 【发布时间】:2012-03-28 07:53:18 【问题描述】:这里我有一个有 4 个动作的控制器,我只想将应用程序布局(默认布局)应用到新动作,或者换句话说,我想除了布局中的索引动作,所以我写了这个,但它没有工作,索引模板正在与布局一起呈现。
class SessionsController < ApplicationController
layout 'application', :except => :index
def index
end
def new
end
def create
end
end
def destroy
end
end
我也试过了
layout 'application', :only => :new
但它也不起作用,索引模板与布局呈现相同的问题。 任何建议这里有什么问题?
【问题讨论】:
【参考方案1】:您可以创建一个方法来定义您的布局并仅在新操作上修复您的布局
layout :my_layout
def my_layout
params[:action] == 'new' ? 'application' : nil
end
【讨论】:
好吧,它有效!但是您知道为什么布局“应用程序”,:除了=>:索引不起作用吗?顺便说一句,布局'false',:except => :new 也有效 我认为这是因为在我的情况下,我在所有情况下都将布局修复为 nil 而不是新操作。但是使用 :except 或 :only 时,它是在其他情况下使用的继承布局。【参考方案2】:您可以在控制器中使用以下代码:
layout :resolve_layout
...
...
private
def resolve_layout
if %w(index show).include?(action_name)
"application"
elsif %w(show).include?(action_name)
"admin"
else
"generic"
end
基本上,如果与当前的 action_name 相比,它们的评估结果为真,则将这些数组视为您提供的布局的 :only 语句。
编辑:我忘了说这允许:only、:except 等。
【讨论】:
以上是关于特定操作的渲染布局的主要内容,如果未能解决你的问题,请参考以下文章