尝试从rails应用程序下载文件

时间:2014-09-08 07:18:54

标签: ruby-on-rails

我在从rails应用程序下载文件时遇到问题。如果有人能给我一些关于我所缺少和做错的见解,我将非常感激。另外,我一直在阅读send_datasend_file。我不明白在要求发送send_data的数据时,send_file的路径是什么意思。有什么不同?再次感谢!

的routes.rb

    resources :companies do
     member do
       get 'send_document'
     end
    end

查看代码(在static_pages_controller中,而不是companies_controller)

     <ul>
    <% @companies.each do |company| %>
        <li>
            <%= company.compName %>
            <%= company.formType %>
            <%= company.fileLocation %>
            <%= link_to "View Document", controller: :companies,             send_document_path(company), , method: :get %>
        </li>
    <% end %>
</ul>

companies_controller.rb

def send_document
 @company = Company.find(params[:id])
 send_file "#{@company.fileLocation}"
end

错误:我在link_to行收到错误。我无法在我的数据库中下载特定公司的文件。任何帮助表示赞赏。谢谢!此外,在companies_controller中,代码Company.find(params [:id])表示它没有公司ID。

更新:我将代码更改为

    <%= link_to "View Document", send_document_path(company), {controller: :companies}, method: :get %>

现在我收到此错误:

app/views/layouts/_search_bar.html.erb where line #6 raised:

undefined method `send_document_path' for #<#<Class:0x00000005446998>:0x00000004147360>

Extracted source (around line #6):

3
4
5
6<%= link_to "View Document", send_document_path(company), {controller: :companies},   method: :get %>
7
8
9

任何帮助将不胜感激!谢谢!

3 个答案:

答案 0 :(得分:0)

send_data(data,options = {})

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


send_file(路径,选项= {})

发送文件。这通过Rack :: Sendfile中间件使用适合服务器的方法(例如X-Sendfile)。要使用的标头是通过config.action_dispatch.x_sendfile_header设置的。您的服务器也可以通过设置X-Sendfile-Type标头为您配置。

<强> More Info

编辑:

我在您的代码中发现了语法错误:

<%= link_to "View Document", controller: :companies,             send_document_path(company), , method: :get %>

send_document_path(company)之后的上一行中有两次逗号(,)可能会出错...

<强>更新

<%= link_to "View Document", :url => { :controller => "companies", :action => "send_document(company)" } ,:method => :get %>

答案 1 :(得分:0)

<%= link_to "View Document", controller: :companies, send_document_path(company), , method: :get %>

它应该不是,,只有一个,

 <%= link_to "View Document", controller: :companies, send_document_path(company),  method: :get %>

答案 2 :(得分:0)

根据您的路线文件,您的链接中指定的路径不正确,并且您不需要指定控制器。

<%= link_to "View Document", send_document_path(company), {controller: :companies}, method: :get %>

应该是

<%= link_to "View Document", send_document_company_path(company), method: :get %>