redirect_to で別の HTTP リクエストを使用するにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/670250

質問

コントローラーのアクションの 1 つが終了したら、put リクエストのみを受け入れるページにリダイレクトする必要があります。put リクエストを使用するために redirect_to を取得する方法を見つけようとしましたが、成功しませんでした。

これは可能でしょうか?それともこれを達成する別の方法はありますか?

役に立ちましたか?

解決 3

[OK]をので、私は私の問題への解決策を見つけました。私はここの状況に非常に良い書き込みを見つけする 。私の実装は次のようになります:

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を使用して)ポスト要求を行った後、_methodのPARAMに「置く」を割り当てることによって、「偽」PUT要求することができました。あなたは、通常のput要求を見れば、すべてのそれはpostのPARAMを持つフォームから_methodです。だから、その少しハックが、それは仕事を取得します。

また、あなたがredirect_postあなたのハッシュの値を呼び出すときにそれ以外の場合はエラーがスローされます文字列であることを確認する必要があります。

他のヒント

私はあなたがこれを行うことができるとは思わない、と私は制限がHTTP自体の一部であることを疑うます。

使用する場合の redirect_toする - リダイレクションが他のパラメータに指定しない限り、 "302移動" ヘッダとして起こる

ブラウザがリダイレクトを経て作る要求の種類を変更するにはどのような方法を明らかにしないHTTP仕様自体を見て持っています。

HTTP にリダイレクトます:

  

このクラスのステータスコードを示し   それ以上のアクションは取られる必要があります   全うするために、ユーザエージェントによって   リクエスト。アクション必要MAY   ユーザエージェントによって実行することが   相互作用のないユーザであれば   そしてこの方法はで使用される場合にのみ、   2番目の要求は、GETまたはHEADです。

私はあなたがこの機能を実現するためにJavaScriptを使用して、または多分あなたのアプリケーションで制御の流れを再考する必要があるかもしれないと思います。

アクションは、あなたが、からリダイレクト単にアクションを呼び出し、そのようなテンプレートをレンダリングしようとしている場所と同じコントローラである場合:

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

そうでない場合は、私はあなたがそれを行う方法を知りません。

クライアントからの put リクエストを発行する別のページにリダイレクトできます。 JavaScriptを使用して.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top