5

このクーポンフォームを持っています

    <%form_for(:download,:download,:url=>{:controller=>"coupons",:action=>"verifycoupon"},:remote=>true) do |f| %>
    <%=text_field :download,:code%>
    <%=f.submit "verify"%>
    <%end%>

コントローラーのアクションのコードを検証した後、次のような確認があります。

render :update do |page|
    page.alert "OK"
end

指示とともにファイルをブラウザに送信したいのですsend_fileが、何も起こらないようです

send_file("/path/to/my/file.extension")

そしてログで私は見ることができます

"Sent file /path/to/my/file.extension (0.1ms)"

何かあるのかなぁと思っていました

render :update do |page|
   page.send_file("/path/to/my/file.extension")
end

 

#### Update #######

私のコントローラーのアクションは次のようになります

def verifycoupon
   code = Code.find(params[:download][:code])
   if code
     if code.is_active?
     render :update do |page|
        page.alert "ok"
     end
       send_file("/path/to/my/file.extension")
     else
       render :update do |page|
          page.alert "this code has already been used"
       end
     end
   else
   render :update do |page|
     page.alert "Code does't exist"
   end
   end
end
4

3 に答える 3

7

私も同じ問題を抱えています。

私の見解link_toでは、私は。のタグを持っていましたremote: true

リンクは、PDFを生成するアクションを目的としていました。PDFが(エビとシンレポートを使用して)生成されて送信されましたが、ダウンロードダイアログがポップアップしませんでした。

を削除しremote: trueて追加するとtarget: '_self'、次のようになります(hamlを使用しています)

!= link_to image_tag( 'print.png' ) + (I18n.t :buttons)[:comments][:print],
    customer_comment_path(@address_book),
    { target: '_self' }

そして、それはうまくいきました。

上記の「 Ajaxリクエスト->サーバー->レスポンス->リダイレクト->クライアント->ダウンロードするリクエスト->... 」を実行する必要はありませんでした。

于 2012-10-30T20:04:03.197 に答える
3

解決策は、Send_fileがAjaxから返されるエンドポイントにリダイレクトを送信することだと聞きました。

つまり、Ajaxリクエスト->サーバー->レスポンス->リダイレクト->クライアント->ダウンロードするリクエスト->同じページにとどまります。

def show
  # if javascript, then redirect to file_sender
end

def file_sender
  # Send file from here.
end

ここを参照してくださいhttp://anaphoral.blogspot.com/2009/03/sendfile-or-senddata-in-linktoremote.html

于 2011-05-16T15:28:00.463 に答える
1

どこに電話しますsendfileか?私はこのようなコントローラーアクションを持っています:

def show
  # ... skipped initalization of requestedfile
  if File.exists?(requestedfile)
    send_file(requestedfile, :type => "application/pdf", :disposition => "inline"
  end
end

私にとってはうまくいきます。

于 2011-05-16T15:25:24.690 に答える