Ruby on rails Rails控制器检查TurboLink是否请求

Ruby on rails Rails控制器检查TurboLink是否请求,ruby-on-rails,ajax,ruby-on-rails-4,turbolinks,Ruby On Rails,Ajax,Ruby On Rails 4,Turbolinks,我正在开发一个使用Turbolinks gem的RubyonRails4应用程序。我注意到,当单击链接时,布局仍然呈现在服务器端,但Turbolinks JavaScript只是从呈现的内容中获取主体。我的问题是在控制器方面,是否可以确定是否通过TurboLink发出请求。基本上,如果通过TurboLink发出请求,我希望将布局设置为false,以避免执行不需要的代码。在我的ApplicationController中,我已经有以下代码: # Don't use layout when AJAX

我正在开发一个使用Turbolinks gem的RubyonRails4应用程序。我注意到,当单击链接时,布局仍然呈现在服务器端,但Turbolinks JavaScript只是从呈现的内容中获取主体。我的问题是在控制器方面,是否可以确定是否通过TurboLink发出请求。基本上,如果通过TurboLink发出请求,我希望将布局设置为false,以避免执行不需要的代码。在我的ApplicationController中,我已经有以下代码:

# Don't use layout when AJAX request
layout proc { |controller| controller.request.xhr? ? false: "application" }

如果我通过jQuery发出AJAX请求,这段代码会阻止AJAX请求呈现标题,但是对于TurboLink它似乎没有任何作用。

虽然这是一个小技巧,但我发现检查标题中的“X-XHR-Referer”似乎可以做到这一点

unless request.headers["X-XHR-Referer"].present? 
    do_some_stuff
end

TurboLink似乎为某些重定向处理添加了标头。但这在未来可能会改变

没有布局的渲染不会中断TurboLink过程吗?TurboLink将(引用):
保持当前页面实例的活动状态,并仅替换标题中的正文和标题
。因此,Turbolinks似乎依赖于要发送的完整页面布局。不久前,我实现了自己的Turbolinks bastardized版本来实现这一点,但发现有时在浏览器中使用“后退”按钮时,页面将呈现为没有正文的页面,事情看起来会很糟糕。我很快决定不值得这么做,我应该使用PJAX或标准AJAX来满足我的需要。但是谢谢你的分享。