【问题标题】: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

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

【问题讨论】:

    标签: ruby-on-rails ruby layout views


    【解决方案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 等。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 2019-10-05
      • 1970-01-01
      相关资源
      最近更新 更多