关闭其中一个操作的布局

Ant*_*ect 78 layout ruby-on-rails

我的情况:ReportsController的查看操作应该呈现纯HTML,但不能作为文件(在浏览器中查看并保存之后).因此,为了渲染我使用视图模板view.html.erb并且我需要关闭此操作的任何布局.但在此控制器的其他操作中,布局应保持不变.只关闭整个控制器的工作原理如下:

ReportsController < ApplicationController
  layout false
Run Code Online (Sandbox Code Playgroud)

但这样做错了:(对于我试图在行动中使用这样的行为的所有动作:

def view      
  @report = Report.new(params[:report])
  unless @report.valid?
    render :action => 'new' and return
  else
    render :layout => false     
  end   
end
Run Code Online (Sandbox Code Playgroud)

我该怎么办?

小智 109

这应该这样做,

def view
    ...
    render :layout => false
end
Run Code Online (Sandbox Code Playgroud)

链接到文档


mck*_*eed 68

试试这个:

ReportsController < ApplicationController
  layout false
  layout 'application', :except => :view
Run Code Online (Sandbox Code Playgroud)

  • 你是对的,`:only`在`layout nil`上不能正常工作.然而,我能够通过缩小布局并将其添加回异常来使其工作.我已经更新了我的答案. (2认同)
  • David Ortiz的回答是"更正确",因为它正确地将布局切换隔离到相关的单独动作. (2认同)

Arc*_*nic 11

在响应块中,添加layout: false.

例如:

respond_to do |format|
  format.html { render :layout => false } # your-action.html.erb
end
Run Code Online (Sandbox Code Playgroud)