답변:
:remote => true
링크 나 양식에 사용하는 경우 다음을 수행하십시오.
respond_to do |format|
format.js { #Do some stuff }
을 호출하여 respond_to 블록 전에 확인할 수도 있습니다 request.xhr?
.
$.ajax({dataType: 'html'})
HTML로 응답하는 아약스입니다. 이를 수행하는 올바른 방법은 두 번째로 언급 한 것입니다request.xhr?
문서는 그 request.xhr?
Returns true if the “X-Requested-With” header contains “XMLHttpRequest”....
그러나 그 점에 유의하십시오
request.xhr?
= ~에 따라 문서에서 말하는 것처럼 BOOLEAN 값이 아닌 숫자 또는 nil 값을 반환합니다.
irb(main):004:0> /hay/ =~ 'haystack'
=> 0
irb(main):006:0> /stack/ =~ 'haystack'
=> 3
irb(main):005:0> /asfd/ =~ 'haystack'
=> nil
이것을 기반으로합니다 :
# File actionpack/lib/action_dispatch/http/request.rb, line 220
def xml_http_request?
@env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/
end
그래서
env['HTTP_X_REQUESTED_WITH'] =~ /XMLHttpRequest/ => 0
문서 :
http://apidock.com/rails/v4.2.1/ActionDispatch/Request/xml_http_request%3F
nil
입니다.
나는 before_action
필터를 사용하는 것을 좋아 합니다. 여러 작업에 대해 동일한 필터 / 권한이 필요할 때 특히 좋습니다.
class MyController < AuthController
before_action :require_xhr_request, only: [:action, :action_2]
def action
@model = Model.find(params[:id])
end
def action_2
# load resource(s)
end
private
def require_xhr_request
redirect_to(root_url) unless request.xhr?
end
end
remote: true
필요한 헤더가 설정되어 있지 않으므로 최신 Rails 버전의 표준 호출에서는 작동 하지 않습니다.