我在从rails应用程序下载文件时遇到问题。如果有人能给我一些关于我所缺少和做错的见解,我将非常感激。另外,我一直在阅读send_data
和send_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
任何帮助将不胜感激!谢谢!
答案 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 %>