Rails 3 - 如何send_file响应 rails 中的远程表单



>我有这个优惠券表格

    <%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

我有同样的问题,有点。

在我看来,我有一个带有remote: truelink_to标签.

该链接旨在执行生成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 请求

-> 服务器 -> 响应 -> 重定向 -> 客户端 -> 下载 -> ..."的请求。

我听说解决方案是将重定向发送到从Ajax返回send_file的端点。

因此,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

你在哪里称呼sendfile?我有一个这样的控制器操作:

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

对我来说效果很好。

相关内容

  • 没有找到相关文章

最新更新