这个想法是在控制器中循环图像数组,然后存储它们中的每一个。该请求显示有关上传图像的正确信息
{"utf8"=>"✓",
"authenticity_token"=>"usbr1ma8uKWBPiVFKh8AKoGYeaZTWAlLXscMBlFYyhw=",
"painting"=>{"name"=>"",
"image"=>[#<ActionDispatch::Http::UploadedFile:0x007fb414becad8 @original_filename="union_creek.jpg", @content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"painting[image][]\"; filename=\"union_creek.jpg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/80/2pcl195n7_x0l8bnrjrp4xw40000gn/T/RackMultipart20130105-7179-kr8a7e>>,
#<ActionDispatch::Http::UploadedFile:0x007fb414beca10 @original_filename="what_lies_beneath.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"painting[image][]\"; filename=\"what_lies_beneath.jpg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/80/2pcl195n7_x0l8bnrjrp4xw40000gn/T/RackMultipart20130105-7179-iclmmw>>]},
"commit"=>"Create Painting",
"gallery_id"=>"13"}
然而,当载波试图存储图像时,我得到一个误导性的错误
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
视图
= form_for [@gallery, @gallery.paintings.new] do |f|
%p= f.text_field :name, placeholder: "Enter painting name"
%p= f.file_field :image, multiple: true
%p= f.submit %>
控制器
uploader = ImageUploader.new
params[:painting][:image].each do |img|
uploader.store!(img) # crash here
end
我发现控制器出了问题,但我无法想出更好的方法来存储多个带载波的文件。
有人能指出我吗?感谢
答案 0 :(得分:1)
这是任何人都有同样问题的解决方案
params[:painting][:image].map { |img| gallery.paintings.create(name: img.original_filename , image: img)