2017-01-13 1 views
1

私はサーバーから簡単にダウンロードしようとしています。これはRails 5.01、Ruby 2.24p230を使用しています。コントローラからsend_data()の後に進む方法は?

ビューには、データをダウンロードするコントローラへのリンクがあります。そこにはうまくいきます。

コントローラのメソッドがあるだけで、この:

def download 
    send_data("some sample text", filename:sample.txt) 
    flash[:success] = "it worked" 
    end 

結果は、ファイルがクライアントにダウンロードされた正しいテキストを含むSAMPLE.TXT命名されていることです。フラッシュは決して起こらない。コントローラーにリンクされたビューは、ページを更新せずに画面に表示されます。 「download.html.erb」というビューは決して呼び出されません。

私の質問は以下のとおりです。

  1. はSEND_DATA次のクライアントとのいくつかの通信を発生させる簡単な方法はありますか?成功したダウンロードの後に​​何かのことをクライアントに伝えることはいいでしょう。

  2. send_dataの後にはどうなりますか?

ありがとうございました。

+1

あなたのルートが表示されているように感じました。作成したHTTPリクエストも役に立ちます。 –

+1

データを送信する場合は、データを送信することに専念しています。あなたは "あなたがそれを持っている"ケースを処理するためにクライアント側に何かをしなければならないでしょう。このようなエンドポイントは通常起動し、フォローアップはありません。クライアントはファイルをダウンロードするだけです。 – tadman

答えて

2

ここで何が起こっているのか理解するには、セッションとフラッシュの仕組みを理解する必要があります。

フラッシュメッセージはセッションに保存され、次の要求に引き継がれます。要求が完了すると、前の要求からのフラッシュメッセージは、セッションに格納されている「フラッシュハッシュ」から削除されます。ユーザーが/fooを要求したとき

class TestController 

    # GET /foo 
    def foo 
    flash[:notice] = "Hello" 
    redirect_to '/bar' 
    end 

    # GET /bar 
    def bar 
    flash.now[:alert] = " world!" 
    end 
end 

だから、彼らは/barにリダイレクトされ、フラッシュハッシュが含まれています:

{ 
    notice: "Hello", 
    alert: " world!" 
} 

、どのようにこれは関連していますか?クライアントがダウンロードボタンをクリックすると、設定したフラッシュメッセージが次回の要求時に表示されます。それは本当にそれほど有用ではありません。代わりに、ユーザーがダウンロードリンクをクリックしたときにジャバスクリプトを使用してポップアップやメッセージを表示するだけです。

クライアントにデータを送信すると、実際にはどのような種類のリダイレクトにも従うように設定できます。送信するヘッダーは無視されます。膨大な数の迷惑または悪意のある使用が原因です。

+0

一般的には、ダウンロードリンクターゲットを新しいウィンドウで開き、JavaScriptイベントリスナーを使用してクライアントをリダイレクトするように設定することが一般的です。しかし、これは通常迷惑であり、ポップアップブロッカーとアンチアドウェアの問題を引き起こします。 – max

+0

PSは、ダウンロードして送信し、嫌がらせをするだけのことです。 – max

+0

説明ありがとうございます。意味をなさない – KenLast

関連する問題