Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 关闭其中一个操作的布局_Ruby On Rails_Layout - Fatal编程技术网

Ruby on rails 关闭其中一个操作的布局

Ruby on rails 关闭其中一个操作的布局,ruby-on-rails,layout,Ruby On Rails,Layout,我的情况: ReportsController的查看操作应呈现纯html,但不能呈现为文件(以便在浏览器中查看并在之后保存)。因此,对于渲染,我使用view template view.html.erb并需要关闭此操作的任何布局。但在该控制器的其他操作中,布局应保持不变。 仅适用于关闭整个控制器,如下所示: ReportsController < ApplicationController layout false 我该怎么办?试试这个: ReportsController <

我的情况: ReportsController的查看操作应呈现纯html,但不能呈现为文件(以便在浏览器中查看并在之后保存)。因此,对于渲染,我使用view template view.html.erb并需要关闭此操作的任何布局。但在该控制器的其他操作中,布局应保持不变。 仅适用于关闭整个控制器,如下所示:

ReportsController < ApplicationController
  layout false
我该怎么办?

试试这个:

ReportsController < ApplicationController
  layout false
  layout 'application', :except => :view
reportscoontroller:视图
这样就可以了

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

在响应块中,添加
布局:false

例如:

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

如果要获取非标准模板,但没有布局,则可以使用:

def non_rest
  render template: 'layouts/something_new', layout: false
end

嗯,你绝对不需要那种明确的回报。如果报告有效,是否要呈现布局?此指令似乎工作错误(或意外)。我尝试使用这些参数的一些组合(:only,:except)。但是删除所有动作的所有布局效果很奇怪。我想这是因为nil或false而不是layoutname。系统尝试对所有其他操作使用“controllername”布局,忽略应用程序布局。尝试使用这些参数,您将了解这一切。您是对的,
:只有
布局nil上不能正常工作。不过,我可以通过对布局进行nilling并将其添加回,以使其正常工作。我已经更新了我的答案。David Ortiz的答案是“更正确的”,因为它正确地将布局切换隔离到所讨论的单独操作。我同意@Paul-
false
works!谢谢你
layout false,only::view
感觉更简洁,可以实现相同的目标,而不会像Antiarchitect提到的那样产生副作用。问题是,你必须为动作中的每种格式指定
layout:false
。有答案时生活才美好!:-DHow关于相反-我可以在没有模板的情况下呈现默认布局吗?
def non_rest
  render template: 'layouts/something_new', layout: false
end