문제

컨트롤러 작업 중 하나가 끝나면 요청을받는 페이지로 리디렉션해야합니다. redirect_to가 풋 요청을 사용하지만 성공하지 못하는 방법을 알아 내려고 노력했습니다.

이게 가능해? 아니면 이것을 달성하는 또 다른 방법이 있습니까?

도움이 되었습니까?

해결책 3

좋아, 그래서 나는 내 문제에 대한 해결책을 찾았다. 상황에 대한 아주 좋은 글을 발견했습니다. 여기. 내 구현은 다음과 같습니다.

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]

그래서 나는 게시물 요청을함으로써 풋 요청을 '가짜'할 수있었습니다. redirect_post) 그런 다음 'put'을 할당합니다 _method 파라. 정상을 보면 put 모든 것을 요청하십시오 post a _method 파라. 그래서 약간 해킹되지만 작업이 완료됩니다.

또한 전화 할 때 redirect_post 해시의 값은 문자열입니다. 그렇지 않으면 오류가 발생합니다.

다른 팁

나는 당신이 이것을 할 수 있다고 생각하지 않으며, 한계가 HTTP 자체의 일부라고 생각합니다.

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

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

HTTP 리디렉션:

이 클래스의 상태 코드는 요청을 이행하기 위해 사용자 에이전트가 추가 조치를 취해야 함을 나타냅니다. 두 번째 요청에 사용 된 방법이 얻거나 헤드 인 경우에만 사용자와 상호 작용하지 않고 사용자 에이전트가 필요한 조치를 수행 할 수 있습니다.

이 기능을 달성하기 위해 JavaScript를 사용하거나 응용 프로그램에서 제어 흐름을 다시 생각해야 할 수도 있습니다.

동작이 리디렉션하려는 위치와 동일한 컨트롤러에있는 경우 작업을 호출하고 템플릿을 그렇게 렌더링하십시오.

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

그렇지 않다면, 당신이 어떻게 그렇게하는지 모르겠습니다.

클라이언트의 풋 요청을 발행하는 다른 페이지로 리디렉션 할 수 있습니다. JavaScript 사용.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top