2016-06-22 4 views
0

Railsアプリケーションで別のコントローラアクション以外からのHTTPリクエストを無視できるようにしようとしています。たとえば、のは、私は私のコントローラのアクションを持っているとしましょう:Rails 4のブラウザからhttpリクエストを無視する

class ChargesController < ApplicationController 
    before_action :set_charge, only: [:show, :edit, :update, :destroy] 

    def show 
    redirect_to edit_charge_path(@charge) 
    end 

    def edit 
    end 

    ... 

end 

私は、コントローラは、showからredirectを受け入れるという動作を取得しようとしていますが、ブラウザでhttp:\\www.mysite.com\charges\2\editのようないくつかのURLを入力するユーザーをリダイレクトしますあなたのコントローラ内だから、いくつかの他の場所(例えば'\')へのアドレスウィンドウ

+0

リダイレクトは、別のHTTPリクエスト(この場合は編集アクション)を実行するだけです。 – Leito

答えて

0

あなたは

def show 
    respond_to do |format| 
    format.html {redirect_to "/"} 
    format.json { render json: @json } 
    end 
end 

を行うことができ、あなたはあなたの他のJSONを要求する行為(または任意のパーソナルプラグインを設定することができますrの形式以外にもhtmlの形式で書かれています)。

+0

私はあなたの提案を試みましたが、それは "/"にルーティングすることによって他のコントローラのアクションからのリダイレクトを処理するようです。私が探しているのは、 'edit.html.erb'が' edit'からのリダイレクトが発生したときにレンダリングされる解決策ですが、誰かが '\ charges \ n \ edit'をブラウザURLに入力すると '\'バー。 (また、 'redirect_to" \ ''を '{}'に含めなければなりませんでした - 私はRails 4.2.6を使用しています) – guero64

0

@Leitoと同じように、ブラウザは最初のコントローラの動作にぶつかり、Railsは301または302とブラウザに新しいURLを命じるLocationヘッダーのいずれかで応答します。したがって、両方のリクエストはブラウザから取得されます。さらに、私は、リクエストがリダイレクトの結果であったことを間違いなく知ることができる、第2のリクエストに存在するヘッダーまたは何かがあるとは思わない。

ユーザーがリダイレクトされたかどうかを確認する方法の1つは、リダイレクトされたコントローラのアクションにヒットしたCookieを設定し、リダイレクト先のルートにあるそのCookieを確認します。これは、最初にリダイレクトルートにヒットしたことを伝えます。もちろん、最後のルートでそのクッキーを削除する必要があります。

私はあなたが他のオプションを最初に見るべきだと思いますが、これはハックのようです。私はそこにあなたの問題のより良い解決策があると確信しています。

関連する問題