2009-03-21 5 views

답변

2

좋아, 그래서 내 문제에 대한 해결책을 찾았습니다. 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 당신의 해시 값을, 그렇지 않으면 오류가 발생합니다 문자열이 있는지 확인해야합니다.

+1

'controller.process'가 레일 4에서 더 이상 작동하지 않습니다. – josal

1

클라이언트의 put 요청을 발행하는 다른 페이지로 리디렉션 할 수 있습니다 (using Javascript).

5

나는이 일을 할 수 있다고 생각지 않는다. 그리고 그 한계는 HTTP 자체의 일부라고 생각한다.

redirect_to을 사용할 때 - 매개 변수에 달리 지정되지 않는 한 리디렉션은 "302 Moved"헤더로 발생합니다.

HTTP 사양 자체를 살펴보면 브라우저에서 리디렉션을 통해 요청하는 유형을 변경하는 방법이 공개되지 않습니다.

HTTP Redirects

는 :

상태 코드의이 클래스는 추가 조치가 필요 가 요청을 수행하기 위해 사용자 에이전트에 의해 을 수행 할 나타냅니다. 및 번째 요청에 사용되는 방법 인 경우에만 GET 또는 HEAD 경우 필요한 조치 사용자와의 상호 작용없이 사용자 에이전트 의해 수행 될 수있다.

JavaScript를 사용하여이 기능을 구현하거나 응용 프로그램에서 제어 흐름을 다시 생각해보십시오.

2

되는 동작이 너무 같은 템플릿에서 리디렉션 단순히 작업을 호출하고 렌더링하려는 경우와 같은 컨트롤러에있는 경우 그렇지 않은 경우

def show 
    index 
    render :action => "index" 
end 

, 다음 나도 몰라 네가 그것을 어떻게했는지.

관련 문제