Rails从show动作下载文件?

Dam*_*che 5 ruby-on-rails ruby-on-rails-3 carrierwave

我有一个上传器,允许您上传文件.我想要做的是在您查看其show动作时触发文档的下载.网址将是这样的:

/documents/16
Run Code Online (Sandbox Code Playgroud)

该文档可以是.txt或.doc.

到目前为止,我的show动作看起来像这样:

  def show
    @document = Document.find(params[:id])
    respond_with(@document) do |format|
      format.html do
        render layout: false, text: @document.name
      end
    end
  end
Run Code Online (Sandbox Code Playgroud)

我该如何实现这一目标?

Mik*_*Mik 12

看一下send_data方法:

将给定的二进制数据发送到浏览器.此方法类似于render:text => data,但也允许您指定浏览器是否应将响应显示为文件附件(即在下载对话框中)或内联数据.您还可以设置内容类型,表观文件名和其他内容.

所以,我认为在你的情况下它应该是这样的:

def show
  @document = Document.find(params[:id])
  send_data @document.file.read, filename: @document.name
end
Run Code Online (Sandbox Code Playgroud)