2010-01-14 109 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