2017-02-28 59 views
0

我正在研究Ruby on Rails应用程序,我需要将一些数据以csv格式加载到JS脚本中进行处理。如何在Rails中访问csv文件

我的CSV文件中app/assets和我的js文件是app/assets/javascripts我使用assets.rb处理:

Rails.application.config.assets.precompile += %w(myscript.js) 

在`myscript.js我对CSV文件中的Ajax调用:

$.ajax({ 
    url: "assets/mycsvfile.csv", 
    async: true, 
    success: function (csvd) { 
     // processing csv data 
     }, 
    error: function(e) { 
     var errorMsg = e? (e.status + ' ' + e.statusText) : ""; 
     console.log(errorMsg); 
     }, 
    dataType: "text" 
    }); 

我仍然得到

404文件未找到

如何加载该csv文件?

感谢

+1

多久呢CSV文件的变化?除非它不断地改变*,否则让浏览器在每次请求时处理它都是非常浪费的。考虑在服务器上处理一次,只要它发生更改并保存结果,然后将预处理的JSON发送到浏览器。 –

+0

@Jordan谢谢,我正在尝试 –

回答

1

把文件mycsvfile.csv在你的Rails应用程序的“公共”目录中。

然后,您将可以直接从YOURDOMAIN/mycsvfile.csv请求中加载它。

编辑:

当你不想使用公共URL,你或者使用HTTP服务器授权或Rails的服务器来处理文件下载。

对于Rails应用程序来处理文件下载,请使用send_file命令。 在提供静态文件之前,您将能够在控制器中检查适当的用户权限。

例子:

class ClientsController < ApplicationController 
    # Stream a file that has already been generated and stored on disk. 
    def download_pdf 
     client = Client.find(params[:id]) 
     send_file("#{Rails.root}/files/clients/#{client.id}.pdf", 
      filename: "#{client.name}.pdf", 
      type: "application/pdf") 
    end 
end 

来源:http://guides.rubyonrails.org/action_controller_overview.html#sending-files

+0

谢谢,我忘了提及我不希望从url中访问该csv文件 –

+0

您不希望从URL访问CSV文件,然后你想如何将它传递给你的Ajax调用? (你的意思是你不希望这个文件可以被公开访问吗?或者你拒绝URL的方式吗?) –

+0

我不希望它是公开的,比如localhost:3000/assets/mycsvfile.csv shouldn' t可下载 –