Я не первый, кто спросил, но и не последний. Как реализовать загрузку нескольких файлов в CarrierWave и Sinatra? У меня такой экшн:
post '/create' do
params.delete 'submit'
d = Dcmnt.new(
:published => params[:published],
:name => params[:name],
:description => params[:description],
:created_at => Time.now
)
d.attachment = params[:attachments]
d.save
redirect '/success'
end
Вот такая модель:
class Dcmnt
include Mongoid::Document
store_in collection: 'dcmnts'
field :published, type: Boolean
field :name, type: String
field :description, type: String
field :created_at, type: Date
mount_uploader :attachment, Uploader, type: String
end
С такой вот формой:
%form{:method => "post", :action => "/create", :enctype => "multipart/form-data"}
%input{:type => "checkbox", :name => "published", :value => "true"} Published?
%input{:name => "name"}
%textarea{:name => "description", :rows => "5"}
%div.form-group
%label Attachments
%input{:type => "file", :name => "attachments[]"}
%input{:type => "file", :name => "attachments[]"}
%input{:type => "file", :name => "attachments[]"}
%input{:type => "file", :name => "attachments[]"}
%input{:type => "file", :name => "attachments[]"}
CarrierWave настроен так:
class Uploader < CarrierWave::Uploader::Base
storage :file
def store_dir
'attachments/' + model.id
end
end
Выглядит корректно, но не работает. При попытке загрузить несколько файлов, впрочем, как и один файл, Pow возвращает
no implicit conversion of nil into String на строке
d.attachment = params[:attachments]. Кстати,
.each и
.map вызванные на
params[:attachments] - не помогают.
Что делать, подскажите?