特定操作的渲染布局

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 等。

【讨论】:

以上是关于特定操作的渲染布局的主要内容,如果未能解决你的问题,请参考以下文章

Flutter的布局

ROR 3 - 指定特定视图文件,忽略应用程序布局

在渲染到布局之前获取文本视图的高度

使用 RSpec & Rails 测试给定布局的渲染

如何在 Rails 中控制器的一个操作中呈现不同的布局和 json 数据?

Android布局优化----ViewStubincludemerge