2017-08-30 8 views
0

PUT /products/123456redirect_toコントローラでページを代わりに表示しますか?

に私を取っているが、私はGET /products/123456に行きたいと思い、この

format.html { redirect_to product_path(@product) } 

のように私のコントローラのアクション何かにリダイレクトやっているレール。 なぜこれが起こっているのか私に説明することができます。正確なヘルパーメソッドは、GETリクエストを行うために使用する必要がありますか?ドキュメントproduct_path(@product)によると

は、私がredirect_to APIドキュメントに

format.html { redirect_to product_path(@product) }, method: :get 

のようなものを渡すための任意のオプションを見つけることができませんでしたすべてのGET, PUT/PATCHためcomon、およびDELETE.

されます。どのように私はこれを達成することができます私を説明してください。おかげ

更新:

def delete_product_media 
    @product = Product.find(params[:id]) 
    @product_media = ProductMedium.where(id: params[:product_media_ids]) 

    respond_to do |format| 
    if @product_media.update_all(deleted_at: Time.zone.now) == params[:product_media_ids].count 
     flash[:notice] = 'Media deleted' 
     flash.keep(:notice) 
     format.html { redirect_to product_path(@product), method: :get } 
    else 
     flash[:notice] = 'Something went wrong!' 
     flash.keep(:notice) 
     format.html {redirect_to product_path(@product) } 
    end 
    end 

end 
+0

少しアクションコードを投稿できますか? –

答えて

0

Aはメソッドを保持する必要がありredirect_to(デフォルトHTTP 302 Found)にリダイレクト、allthough常にません。 GETを強制的に使用する場合は、303 See Otherを使用できます。

仕様は、メソッドを必要とし、ボディ、リダイレクトが行われた場合、いないすべてのユーザエージェントがここに準拠して、あなたはまだバグのあるソフトウェアを見つけることができます変更することがない場合でもhttps://developer.mozilla.org/en-US/docs/Web/HTTP/Status/302

を参照してください。そこ。したがって、GETまたはHEADメソッドに対する応答としてのみ302コードを設定し、その場合はメソッドの変更が明示的に禁止されているため、代わりに307一時リダイレクトを使用することをお勧めします。

使用したメソッドをGETに変更する場合は、代わりに303を参照してください。これは、アップロードされたリソースではなく、確認メッセージ(「あなたは正常にXYZをアップロードしました」など)であるPUTメソッドに回答する場合に便利です。

redirect_toの場合、statusオプションがデフォルトを上書きします。 redirect_to product_path(@product), status: :see_other

+0

ありがとうございます。それは明確な説明です。ステータス303を使用して、ページを表示するようにリダイレクトしています。しかし、ここでもう一つの問題が直面しています。アクションは、更新されたデータを表示するページに戻って、ショーページからのAJAX呼び出しで上記のアクションを呼び出しています。しかし、ページがリフレッシュされません。任意の手掛かりをどのようにこれを解決するには? –

+1

あなたが単に「

」を「提出」すれば、通常のページリロードが行われます。 AJAXはこれまでにページをリロードしないように設計されており、JavaScriptで対処するレスポンスデータを提供するだけです。 JavaScriptでは、['window.location'](https://developer.mozilla.org/en-US/docs/Web/API/Window/location)を使って' GET'としてリロードしたり、隠しフォームを使用することができます'POST'を得る(そしてRails' PUT'、 'DELETE'などの特殊な' _method'形式のパラメータで)。 HTTPリダイレクトは 'Location'ヘッダーを使用するので、JavaScriptでそれを取得できます(ただし、4XXまたは5XXのエラー応答も確認してください)。 –

+0

ありがとうございます。すでに窓を開けています。location.reload。ユーザーが削除ボタンをクリックする秒数分後にリロードする(これはajax呼び出しが実行を終了するのを待っているので、(。 –

-1

表示ページにリダイレクトする場合は、redirect_to @productsとすることができます。 GET/products/123456のように処理されます。

関連する問題