在我的操作中,我希望只有当它是从 AJAX 请求调用的时候才用处理来响应。我该如何检查?
我想做这样的事情:
def action
@model = Model.find(params[:id])
respond_to do |format|
if (wasAJAXRequest()) #How do I do this?
format.html #action.html.erb
else
format.html {redirect_to root_url}
end
end
6条答案
按热度按时间knpiaxh11#
您可以检查
header[X-Requested-With]
以查看它是否是 AJAX 请求。下面是一个很好的article示例。以下是一个示例:
q8l4jmvw2#
如果您在链接或表单中使用
:remote => true
,您应该执行以下操作:您还可以通过调用
request.xhr?
在response_to块之前进行检查。fhity93d3#
更新:
从Rails 6.1.0开始,
xhr?()
实际上(最终)返回一个布尔值。https://github.com/rails/rails/commit/0196551e6039ca864d1eee1e01819fcae12c1dc9#diff-60b77e427ea7ba142faa477fac10b8d0134cede4e35a3b1953c425200fadf1acL267-L269
原始答案:
医生说那个请求.xhr?
但要注意
根据=~,返回数值或空值,而不是文档中所说的布尔值。
它是基于这样的:
所以
文档:
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
slmsl1lt4#
如果您在链接、表单中使用
:remote => true
,那么您的响应将以js形式出现,而不是HTML、JSON等。您还需要创建,action相应js文件,在您情况下,action名称是action,因此文件名将是-
action.js.erb
还需要将我们action代码转移到action.js.erb
文件中piok6c0g5#
我喜欢使用
before_action
过滤器。当你需要相同的过滤器/授权来执行多个操作时,它们特别好。voase2hg6#
如果返回0,则表示它是一个 AJAX 请求,否则将返回nil