Hochladen mehrerer Dateien auf einmal zu Rails-app mit Carrierwave (HTML5)
Ich bin nah dran...sehr nah...ich bin in der Lage, einzelne Dateien hochladen nur gut...aber wenn ich den Typ ändern meiner form file_field
zu :multiple => true
so kann ich das hochladen mehrerer Bilder auf einmal meine hochgeladenen Dateien bekommen, eingewickelt in ein array...und die 'Magie' der 'accepts_nested_attributes_for" verloren.
Edit:
Nach der Prüfung mehr Frage ich mich, ob ich auch brauchen, um die Mühe mit accepts_nested_attributes_for
? Vielleicht sollte ich einfach nur einen file_field, :multiple => true
in meiner Galerie form (im Gegensatz zu einer verschachtelten form) und dann in meinem create-Aktion erstellen, die neue Galerie, und dann eine Schleife durch jedes element in der params[:gallery][:photos_attributes]["0"][:image]
array von hand, so zu sprechen, ruft @gallery.photos.create
für jedes element. ?!? Scheint umständlich...aber es ist alles, was ich mit oben kommen kann.
In der Hoffnung, jemand mit mehr Erfahrung mit Rails kann, Glockenspiel...
Params:
{"utf8"=>"✓",
"authenticity_token"=>"9jXvIwcllct7UyUfo6cvhEucQf2u3SY50SuaCLtFO4c=",
"gallery"=>{
"name"=>"First Gallery",
"photos_attributes"=>{"0"=>{
"image"=>[
#<ActionDispatch::Http::UploadedFile:0x00000104b78978
@original_filename="first_test_image.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"first_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-vz78ee>>,
#<ActionDispatch::Http::UploadedFile:0x00000104b78950
@original_filename="second_test_image.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"second_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n",
@tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-1jzhhyg>>
]
}
}
}, "commit"=>"Save", "action"=>"create", "controller"=>"galleries"}
#app/models/gallery.rb
class Gallery < ActiveRecord::Base
has_many :photos, :dependent => :destroy
accepts_nested_attributes_for :photos
end
#app/models/photo.rb
class Photo < ActiveRecord::Base
belongs_to :gallery
mount_uploader :photo, PhotoUploader
end
#config/routes.rb
resources :galleries do
resources :photo, :only => [:create, :destroy]
end
GalleriesController
def new
@gallery = Gallery.new
@gallery.photos.build
respond_to do |format|
format.html # new.html.erb
format.json { render json: @gallery }
end
end
...
def create
@gallery = Gallery.new(params[:gallery])
respond_to do |format|
if @gallery.save
format.html { redirect_to @gallery, notice: 'Gallery was successfully created.' }
format.json { render json: @gallery, status: :created, location: @gallery }
else
format.html { render action: "new" }
format.json { render json: @gallery.errors, status: :unprocessable_entity }
end
end
end
- Nur aus Neugier, was ist
"utf8"=>"✓"
für? Warum das tickmark? - Das geht in params standardmäßig, wenn Sie eine Anfrage an den server zu sagen, welche Kodierung es ist. Überprüfen Sie Ihre rails-server-Ausgabe und du wirst sehen es gibt.
- Ich weiß nicht wirklich verwenden Schienen es nur, das mich faszinierte. Danke für die Erklärung!
- haben Sie jemals verwalten eine Lösung finden?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun, ein wenig hack für die params-array, so etwas wie:
Ich habe ein ähnliches problem, ich weiß, es ist ein hässlicher hack, aber es funktioniert für mich.
Graben accepts_nested_attributes_for und stattdessen fügen Sie diese zu Ihrem Galerie-Modell.
Stellen Sie außerdem sicher, dass die Fotos in Ihrer Galerie zugänglich attribs Fall, dass Sie Schutz vor mass-assignment. Ansonsten wirst du nicht bekommen, die Fotos-array-hash-Zuordnung aus Ihrer params. I. e.
user_id
von dersession
auf jedes Foto...und Sie wissen nicht wie?...kann nicht scheinen, um aufsession
innerhalb des Modells.