假设我有一个控制器动作,每当你试图通过js格式访问它时,我想什么都不渲染。
def no_js_please
# there isn't a no_js_please partial or view
respond_to do |format|
format.html { # render a template }
format.json { render json: {valid: true} }
format.js { render nothing: true, status: :not_found }
end
end
当您通过html或JSON访问端点时,它可以正常工作。当您尝试通过JS访问它时,它不起作用。但是,它确实执行了块,因为如果我在js块中添加binding.pry
,它就会被拾取。
然而,这确实有效:
def no_js_please
if request.format.js?
render nothing: true, status: :not_found
end
end
那么两者之间的区别是什么?
修改
作为下面提到的人,实际的错误是什么?因此,在这种特殊情况下,它会引发ActionController::InvalidCrossOriginRequest
。
答案 0 :(得分:0)
使用“ head”代替“ rendering:true”。无论如何,实际上在Rails 5+中已不推荐使用后者。
def no_js_please
respond_to do |format|
format.html { # render a template }
format.json { render json: {valid: true} }
format.js { head :not_found }
end
end
这将为您提供所需的结果,并且升级时将减少一行更改。