2010-01-14 188 views
58

我的情况: ReportsController的视图动作应该呈现纯html,而不是作为文件(在浏览器中查看并保存)。所以为了渲染我使用视图模板view.html.erb和我neet关闭此操作的任何布局。但在此控制器的其他操作中布局应保持不变。 作品只有关闭了整个控制器是这样的:关闭操作的布局

ReportsController < ApplicationController 
    layout false 

但是,这样做是错误:(对所有的动作 我试图在动作中使用这样的事情:

​​

我应该怎么?做

+0

好了,你肯定不需要那么明确的回报。如果报告有效,是否要布局渲染? – tfwright 2010-01-14 05:23:57

回答

59

试试这个:

ReportsController < ApplicationController 
    layout false 
    layout 'application', :except => :view 
+0

看起来这个指令工作不正确(或意外)。我试图使用这些参数的一些组合(仅:,除外)。但奇怪的是,除去了所有操作的所有布局。我认为这是因为没有'布局名'而不是'虚假'。系统会尝试使用'controllername'布局来处理忽略应用程序布局的所有其他操作。尝试玩这个参数,你会明白这是什么。 – Antiarchitect 2010-01-21 05:34:42

+2

你说得对,':only'在'layout nil'上无法正常工作。不过,我可以通过消除布局并将其添加回来,从而实现它的工作。我已经更新了我的答案。 – mckeed 2010-01-21 16:20:35

+9

不是'nil'而是'false' – Paul 2014-04-22 10:08:23

84

这应该这样做,

def view 
    ... 
    render :layout => false 
end 

Link to Documentation

+0

问题在于,您必须为动作中的每种格式指定'layout:false'。 – JellicleCat 2013-03-14 16:55:43

+0

'format.html {render layout:false}' – dinjas 2013-05-17 00:43:23

7

在响应块,加layout: false

例如:

respond_to do |format| 
    format.html { render :layout => false } # your-action.html.erb 
end