渲染特定操作的布局

时间:2012-03-28 07:53:19

标签: ruby-on-rails ruby layout views

这里我有一个带有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

但它也不起作用,索引模板与布局呈现的问题相同。 任何建议这里的问题是什么?

2 个答案:

答案 0 :(得分:3)

您可以创建一种方法来定义布局并仅在新操作

上修复布局
layout :my_layout

def my_layout
  params[:action] == 'new' ? 'application' : nil
end

答案 1 :(得分:1)

以下是您可以在控制器中使用的代码:

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进行比较评估为true,则将这些数组视为:仅用于布局的语句。

编辑:我忘了提到这只允许:只有,:除了等等。