2017-02-28 30 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可下載 –