Le téléchargement de plusieurs fichiers à la fois à l'application Rails avec Carrierwave (HTML5)
Je suis proche...très proche...je suis en mesure de télécharger des fichiers très bien...mais quand je change le type de mon formulaire file_field
à :multiple => true
donc je peut télécharger plusieurs images à la fois mes fichiers téléchargés sont enveloppés dans un tableau...et la 'magie' de 'accepts_nested_attributes_for" est perdue.
Edit:
Après un examen plus approfondi, je me demande si j'ai encore besoin de s'embêter avec accepts_nested_attributes_for
? Peut-être que je devrais juste avoir un file_field, :multiple => true
dans ma Galerie (par opposition à une imbriqué) et ensuite dans mon action create créer la nouvelle galerie et ensuite une boucle sur chaque élément de la params[:gallery][:photos_attributes]["0"][:image]
tableau à la main, pour ainsi dire, l'appel de @gallery.photos.create
pour chaque élément. ?!? Semble lourd...mais c'est tout ce que je peux venir avec.
En espérant que quelqu'un avec plus d'expérience avec les Rails peuvent carillon...
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
"utf8"=>"✓"
? Pourquoi le tickmark?Qui va dans les paramètres par défaut lorsque vous faites une demande au serveur pour lui dire ce qu'codage de la chaîne, il est. Vérifiez votre serveur rails de sortie et vous verrez qu'il est là.
Je n'ai pas fait d'utiliser des Rails, il vient de m'intriguait. Merci pour l'explication!
avez-vous jamais réussi à trouver une solution à cela?
OriginalL'auteur Meltemi | 2011-06-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez faire un petit hack pour le tableau params, quelque chose comme:
J'ai un problème similaire, je sais que c'est un vilain hack, mais cela fonctionne pour moi.
OriginalL'auteur Jonathan Hernández
Fossé accepts_nested_attributes_for et, au lieu de l'ajouter à votre Galerie de modèle.
Aussi, assurez-vous que les photos dans votre galerie est accessible attribs dans le cas où vous êtes à la protection contre la masse. Sinon, vous n'aurez pas de photos de tableau de hachage de la cession de votre params. I. e.
user_id
de lasession
à chaque photo...et vous ne savez pas comment?...pouvez pas sembler obtenir àsession
à partir de l'intérieur du modèle.OriginalL'auteur Dave Rapin