读取文件内容rails
我有一个表单试图在JSON文件中读取解析/ actions / etc。 我在控制器中读取它时遇到问题。
视图:
:admins, :action => :upload_json}, {:multipart => true, :method => :post}) do |f| %>
控制器:
def upload_json file_data = params[:datafile] File.read(file_data) do |file| file.each do |line| ## does stuff here.... end end end
当我播种数据时,类似的function在我的seed.rb
文件中seed.rb
– 只是无法在上传的文件中读取它。
我得到的错误是: can't convert ActionDispatch::Http::UploadedFile into String
。
在此先感谢您的帮助!
弄清楚了。 需要改变:
file_data = params[:datafile]
至
file_data = params[:datafile].tempfile
并决定使用.open
函数进行更改:
File.read(file_data) do |file|
至
File.open(file_data, 'r') do |file|
params [:datafile]是ActionDispatch :: Http :: UploadedFile类的一个实例,其中附带了tempfile。要打开tempfile
你尝试类似的东西
File.open(params[:datafile].path) do |file| #your stuff goes here end
使用path
打开上传的文件。
params[:datafile]
是ActionDispatch::Http::UploadedFile
类的一个实例,你需要通过调用path
来获取存储文件以正确处理它。
此外, File.read
不会为您提供您正在寻找的逐行处理。 您需要将其更改为File.open
。
试试这个:
调节器
def upload_json uploaded_datafile = params[:datafile] File.open( uploaded_datafile.path ) do |file| file.each_line do |line| # Do something with each line. end end end
另类风格
def upload_json File.foreach( params[:datafile].path ) do |line| # Do something with each line. end # FYI: The above method block returns `nil` when everything goes okay. end