2015-08-19 3 views
1

Я загрузив файл JSON в Rails для того, чтобы разобрать его, а затем вставить в базу данных без сохранения самого файлаRead загруженный файл JSON в Rails

Форма

= form_tag import_posts_path do 
    = file_field_tag :file 
    = submit_tag "import" 

метод контроллера

def import 
    file = params[:file] 

    puts "file => " + file # file => posts.json 

    data = File.read(params[:file]) # Errno::ENOENT at /posts/import No such file or directory @ rb_sysopen - posts.json 

    json = JSON.parse(data) 
end 

маршруты

resources :posts do 
    collection { post :import } 
end 

Информации запроса в терминале, и posts.json есть, но я получаю Errno::ENOENT at /posts/import No such file or directory @ rb_sysopen - posts.json

Parameters: {"utf8"=>"✓", "authenticity_token"=>"9lzpwyCWclgiI4WA/zho5y1WLCBQtRL7z3FcAn+wc80=", "file"=>"posts.json", "commit"=>"import"} 
file => posts.json 
Completed 500 Internal Server Error in 23ms 
+0

Вы должны отправить его как данные в виде многостраничной формы – usmanali

+0

Посмотрите, подходит ли эта нить http://stackoverflow.com/questions/2521053/how-to-read-a-user-uploaded-file-without-saving -it-to-the-database – xenover

+0

Спасибо @usmanali, что сделал трюк плюс новая работа в методе –

ответ

1

Решения:

Обновления формы для отправки файла в виде данных многочастной формы, как @usmanali рекомендуется

= form_tag import_posts_path, multipart: true do 
    = file_field_tag :file 
    = submit_tag "import" 

, а затем в контроллере только read непосредственно в params[:file], как описано в этом документе answer

def import 
    file = params[:file].read 
    data = JSON.parse(file) 
end 
Смежные вопросы