내 컨트롤러 작업 중 하나가 끝나면 put 요청 만 수락하는 페이지로 리디렉션해야합니다. 나는 put 요청을 사용하기 위해 redirect_to를 얻는 방법을 알아 내려고 노력했지만 성공하지 못했습니다.다른 HTTP 요청을 사용하려면 redirect_to를 어떻게 할 수 있습니까?
이것이 가능합니까? 아니면 이것을 수행 할 또 다른 방법이 있습니까?
내 컨트롤러 작업 중 하나가 끝나면 put 요청 만 수락하는 페이지로 리디렉션해야합니다. 나는 put 요청을 사용하기 위해 redirect_to를 얻는 방법을 알아 내려고 노력했지만 성공하지 못했습니다.다른 HTTP 요청을 사용하려면 redirect_to를 어떻게 할 수 있습니까?
이것이 가능합니까? 아니면 이것을 수행 할 또 다른 방법이 있습니까?
좋아, 그래서 내 문제에 대한 해결책을 찾았습니다. here 상황에 대한 아주 좋은 기사를 찾았습니다. 내 구현은 다음과 같습니다 : 다음
private
def redirect_post(redirect_post_params)
controller_name = redirect_post_params[:controller]
controller = "#{controller_name.camelize}Controller".constantize
# Throw out existing params and merge the stored ones
request.parameters.reject! { true }
request.parameters.merge!(redirect_post_params)
controller.process(request, response)
if response.redirected_to
@performed_redirect = true
else
@performed_render = true
end
end
이 같은이 방법이라고 :
redirect_post :controller => 'registrations', :action => 'order', :_method => 'put', :authenticity_token => params[:authenticity_token]
그래서 내가 POST 요청을 (redirect_post
을 사용)에 의해 '가짜'풋 요청에 수 있었다 다음 매개 변수 _method
에 'put'을 지정합니다. 당신이 정상적인 put
요청에 보면 모든 그것은 _method
PARAM있는 폼에서 post
이다. 그래서 그 조금 hackish하지만 그것은 일을 끝낼 수 있습니다.
또한, 당신은 당신이 호출 할 때 redirect_post
당신의 해시 값을, 그렇지 않으면 오류가 발생합니다 문자열이 있는지 확인해야합니다.
클라이언트의 put 요청을 발행하는 다른 페이지로 리디렉션 할 수 있습니다 (using Javascript).
나는이 일을 할 수 있다고 생각지 않는다. 그리고 그 한계는 HTTP 자체의 일부라고 생각한다.
redirect_to을 사용할 때 - 매개 변수에 달리 지정되지 않는 한 리디렉션은 "302 Moved"헤더로 발생합니다.
HTTP 사양 자체를 살펴보면 브라우저에서 리디렉션을 통해 요청하는 유형을 변경하는 방법이 공개되지 않습니다.
는 :상태 코드의이 클래스는 추가 조치가 필요 가 요청을 수행하기 위해 사용자 에이전트에 의해 을 수행 할 나타냅니다. 및 번째 요청에 사용되는 방법 인 경우에만 GET 또는 HEAD 경우 필요한 조치 사용자와의 상호 작용없이 사용자 에이전트 의해 수행 될 수있다.
JavaScript를 사용하여이 기능을 구현하거나 응용 프로그램에서 제어 흐름을 다시 생각해보십시오.
되는 동작이 너무 같은 템플릿에서 리디렉션 단순히 작업을 호출하고 렌더링하려는 경우와 같은 컨트롤러에있는 경우 그렇지 않은 경우
def show
index
render :action => "index"
end
, 다음 나도 몰라 네가 그것을 어떻게했는지.
'controller.process'가 레일 4에서 더 이상 작동하지 않습니다. – josal