永远不要渲染布局以响应xhrs

Tom*_*man 12 ajax ruby-on-rails

大多数时候,当请求来自AJAX时,我不想呈现布局.为此render :layout => !request.xhr?,我经常在我的控制器动作中写作.

如何将其设为默认值?也就是说,我希望能够写作

def new
  Post.find(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

并具有功能

def show
  Post.find(params[:id])
  render :layout => !request.xhr?
end
Run Code Online (Sandbox Code Playgroud)

(我很乐意在极少数情况下手动指定布局,我想使用它.)

Har*_*tty 11

这个怎么样?

class UsersController < ApplicationController
  layout proc {|controller| controller.request.xhr? ? false : "application" }
end
Run Code Online (Sandbox Code Playgroud)


fiv*_*git 5

为了使其成为永久不为任何XHR请求呈现布局的默认设置,您可以这样做:

class ApplicationController < ActionController::Base
  layout proc { false if request.xhr? }
end
Run Code Online (Sandbox Code Playgroud)

当请求是XHR请求时,它会在没有布局的情况下呈现请求的视图.否则,它使用默认布局行为,该行为通过继承查找布局.

这与说法不同controller.request.xhr? ? false : 'application',因为这将始终呈现application非XHR请求的布局,这有效地禁用了继承查找.

另请参阅ActionView文档以获取nil参数和布局继承.