2015-03-15 3 views
0

У меня возникли проблемы с загрузкой нескольких изображений через Carrierwave, и я не уверен, что это ошибка или ошибка пользователя (возможно, последняя). Я делаю все довольно стандартно, хотя (согласно документации), поэтому странно, что это не работает.Невозможно загрузить несколько изображений с Carrierwave

У меня есть следующие в моей Gemfile: gem 'carrierwave', github: 'carrierwaveuploader/carrierwave'

мой image_uploader.rb:

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    version :thumb do 
    process :resize_to_limit => [590, 590] 
    end 
    version :featured do 
    process :resize_to_fill => [390, 390] 
    end 
    def extension_white_list 
    %w(jpg jpeg gif png) 
    end 
end 

Мой article.rb файл:

class Article < ActiveRecord::Base 
    mount_uploaders :images, ImageUploader 
end 

I я позволяю Титулы перейти от моего контроллера с:

def article_params 
    params.require(:article).permit(:title, :images, :body) 
end 

И _form.html.erb частичное использование:

<%= form_for @article, html: { multipart: true } do |f| %> 
    <%= f.label :images %><br> 
    <%= f.file_field :images, multiple: true %><br> 
    <%= f.submit 'Update Article' %> 
<% end %> 

Как ни странно, когда я загрузить два изображения, я не вижу их перешли в article_params из метода обновления.

Если я поддеть его, я могу видеть, что:

params.require(:article).permit(:images) 
Unpermitted parameters: title, images, body 
=> {} 

Изображения, кажется, неразрешенным, хотя я явно разрешить его ...

Любые подсказки относительно того, что может быть неправильно здесь?

+0

Похоже вы реализовали множественную загрузку файлов неправильно. Посмотрите [этот пост] (http://stackoverflow.com/questions/21411988/rails-4-multiple-image-or-file-upload-using-carrierwave). В нем объясняется, как реализовать множественную загрузку с помощью Carrierwave. –

+0

@maxd Я работал над примером в официальной документации: https://github.com/carrierwaveuploader/carrierwave#multiple-file-uploads. Интересно, не так ли это? – DaniG2k

ответ

0

Решения кажется:

params.require(:article).permit(:title, :body, images: []) 

Если вы посмотрите в Поддеть на images пар, его типа является массивом:

> params[:article][:images].class 
=> Array 

Из документации:

Чтобы объявить, что значение в параметрах должно быть массивом разрешенных скалярных значений, сопоставьте ключ с пустым массивом:

params.permit(id: []) 

Источник: 4.5.1 Permitted Scalar Values

+0

Гений! Большое спасибо за это. Есть только одна ошибка: она должна быть 'params.require (: article) .permit (: title,: body, {images: []}). По-видимому, изображения должны быть обернуты вокруг хэша. – DaniG2k

+0

@raqhqua любая подсказка, как удалить отдельные загрузки с помощью флажка? Используя что-то вроде '<% = f.check_box: remove_images%> 'удалит все загруженные файлы. – DaniG2k