我正在尝试创建一个简单的链接,单击该链接会启动与特定资源关联的文档的下载。我有一个资源模型,在该模型中有一个名为“文档”的列。单击链接时,我能够成功地查看内联文档,但我更愿意下载它。我一直在阅读有关内容类型和 send_file 的内容,但我无法将它们完全拼凑起来以发挥作用。
这是我认为我需要用于链接的代码:
<%= link_to 'Download File', :action => "download_file" %>
这会引发错误:
ResourcesController#show 中的 ActiveRecord::RecordNotFound 找不到 id=download_file 的资源
当我将链接更改为此时,它会在浏览器中打开文件:
<%= link_to 'Open file', resource.document_url, :target => "_blank" %>
在我的 ResourcesController 我定义了这个方法:
def download_file
@resource = Resource.find(params[:id])
send_file(@resource.file.path,
:filename => @resource.file.name,
:type => @resource.file.content_type,
:disposition => 'attachment',
:url_based_filename => true)
end
我在 routes.rb 中设置了一条路线,如下所示:
resources :resources do
get 'resources', :on => :collection
end
因此,基于此错误,我在 ResourcesController 中的 download_file 方法似乎无法确定与文档关联的资源记录的 id。
我正在运行:Rails 3.2.11 Carrierwave 0.8.0 Ruby 1.9.3-p194
我希望能对此有所了解。我搜索了许多文章,但找不到简单的教程。谢谢。