2014-10-06 2 views
0

Я хочу загрузить файл в папку/tmp, а затем использовать его в контроллере. Но файл не переходит из представления в контроллер. Посмотрите мое мнение:Загрузка файла в/tmp, rails 2

<% form_tag import_cash_payments_forms_path, {:method => :post, :multipart => true} do %> 
    <b>city:</b> 
    <%= select :data, :city_id, @cities %> 
    <br> 
    <br> 
    <b>region:</b> 
    <%= select :data, :region_id, @regions %> 
    <br> 
    <br> 
    <b>date:</b> 
    <%= date_select2 :data, :date %> 
    <br> 
    <br> 
    <b>file:</b><br> 
    <%= file_field_tag :file %><br> 
    <small>Доступные форматы: xml, xmlx</small> 
    <br> 
    <br> 
    <%= submit_tag "Load", :onclick => "submitAndTemporarilyDisable(this)" %> 
<% end %> 

А вот мой контроллер:

def import_cash_payments 
     selects 
     employer_id = current_employer.id 
     datas = params.slice(:city_id, :region_id, :date) 
     file = File.new(params[:file]) # HERE IS ERROR... File is nil, but why? 
     file.save 
     import = Import.new(datas, employer_id, file) 
     import.run 
    end 

ошибка, я получаю:

can't convert nil into String 

Ошибка дается Befor представить, я не могу даже нажать кнопку, Потому что просмотр не работает.

+0

Файл является классом ruby, который ожидает, что определенный набор атрибутов будет передан его методу '.new'. Атрибуты, которые вы получаете в параметрах, вероятно, имеют неправильные имена. Что у вас есть в 'params [: file]'? (ваш файл журнала покажет вам) –

ответ

1

Вот что я сделал в прошлом, чтобы сделать это вручную (в отличие от использования скрепки или аналогичных). Ключом к этому является то, что вы вытаскиваете данные из параметра файла с помощью .read, а затем записываете его в новый файл, который вы создаете, с .write. Вам также нужно указать имя файла, я использую временную метку здесь.

#you need to make a filename for the file in tmp. Let's use a timestamp 
@filename = File.join("/tmp", Time.now.to_f) 
@file = File.open(@filename,"w"){|f| f.write params[:file].read} 
Смежные вопросы