2016-10-21 2 views
2

Я довольно новичок в Rails и Carrierwave.Загрузка изображения несущей волны, возвращающая пустой в параметрах

У меня есть эта форма, которая отображает коробку jquery modal с некоторым динамическим кодом для отображения от 1 до N изображений, выбранных пользователем при нажатии кнопки файла.

enter image description here

Это мой входной файл вместе с его формой (я удалил остальную часть HTML, как это кажется неуместным для этой цели иллюстрирования моей проблемы):

<%= simple_form_for [:project, ConsolidatedDocument.new], html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<%= f.button :button, class: 'btn btn-primary btn-xs' %> 
... 
<% end %> 

На моем контроллер, я пытаюсь сохранить все значения входных данных формы, которые кажутся автоматически при нажатии кнопки.

Проблема в том, что любое значение, которое должно поступать с входным файлом, совершенно пустое, и я не могу найти причину, по которой он пуст. Вот мой Params ударяя представить:

(byebug) params 
{"utf8"=>"✓", "authenticity_token"=>"xESj3za30Y9CBXqG6P3MHm9axNGsRY/+ejsiMLYfIPVyto7CAnTVYdhW5xBMlzpiBKPbXq2h0tfE8KYnXtmkVg==", "photo"=>{"files"=>[""]}, "macro_types_1"=>{"id"=>"4"}, "doc_types_create_1"=>{"id"=>"127"}, "macro_types_0"=>{"id"=>"5"}, "doc_types_create_0"=>{"id"=>"141"}, "document_checklist_comment"=>{"photo_ids"=>["87611", "87612"]}, "button"=>"", "controller"=>"consolidated_documents", "action"=>"create", "project_id"=>"524"} 

Смотрите, что "фото" => { "файлы" => [ ""]} настаивает на ближайшем пусто. Как я уже сказал, я не испытываю проблем с Rails, и хотя я искал поток stackoverflow для подобных проблем, мой, похоже, отличается от тех, которые я искал здесь.

Любые предложения?

Edit:

В качестве обновления, я возился с моей формы, вручную передавая файл, когда я называю ConsolidatedDocuments.new, например, так:

post_attributes = params.require(:consolidated_document).permit(:name, :file, :document_type_id, :project_id, :user_id) 
       @consolidated_document = ConsolidatedDocument.new("name" => @file_name, "file" => @file_string, "document_type_id" => params["doc_types_create_"+i.to_s]["id"],"project_id" => @project.id, "user_id" => current_user.id)       

Потом я заметил, что независимо от того, то, что я передаю как значение для этой «file» => @file_string, всегда будет отображать «файл» как нуль.

Вот как мой объект выглядит в момент удара сохранить:

(byebug) @consolidated_document 
#<ConsolidatedDocument id: nil, name: "4f70d1b892066f849ee88222b7251ac6.jpg", file: nil, deleted: false, deleted_at: nil, document_type_id: 141, project_id: 524, user_id: 409, created_at: nil, updated_at: nil> 

файла настаивает на пришедшем из ноля! Как так?

+0

Вы следовали https://github.com/carrierwaveuploader/carrierwave # multiple-file-uploads – Sajan

+0

Да @sajan. Это не первая процедура загрузки изображений, встроенная в эту систему. Итак, все параметры и конфигурации уже установлены правильно. Мне кажется, что характер как этой многотопливной загрузки, так и тот факт, что она содержит некоторые динамически создаваемые входные данные, является источником беспорядка для этой реализации. Я пытаюсь взглянуть на это прямо сейчас. –

ответ

1

Я думаю, что у вас есть проблемы с simple_form_for.Try,

**<%= simple_form_for :project, url: url_for(controller: "consolidated_documents", action: "create"), html: { role: 'form' } do |f| %> 
... 
<input type="file" name="photo[files][]" multiple="multiple" id="file_upload_input"> 
... 
<% end %>** 

Также просматривает вход не связан с формой и, следовательно, PARAMS появляется только если какие-либо файлы существуют в представлении времени. Поле вашей кнопки не связано с вводом файла. Может быть лучше, если полный код формы имеющегося

+0

Спасибо @Sathishkumar Jayaraj! Это то, что я искал! –

+0

@ClaudioFernandoMaciel, пожалуйста, укажите тик для правильного ответа. –

1

Изменить форму, как показано ниже:

<%= form_for(@consolidated_document) do |f| %> 

<%= file_field_tag "photo[]", multiple: true %> 

<%= f.submit %> 

В контроллере новая:

@consolidated_document = ConsolidatedDocument.new 
Смежные вопросы