2009-05-06 7 views
1

J'utilise plusieurs champs de fichier dans une vue pour télécharger plusieurs fichiers. Je voudrais informer l'utilisateur sur le téléchargement progrès. J'ai essayé d'utiliser quelque chose comme ceciFournir des commentaires à afficher à partir du contrôleur

def create 
    params[:upload_data].each do |file| 
    unless (file =="" or file== nil) 
    @photo = Photo.create({:approved => false, :user_id => @current_user.id})  
     @result = "Uploading #{file.original_filename}" 
      render :update do |page| 
      page.insert_html(:bottom, 'progress', :partial => 'partials/result') 
      end 
     #... perform upload 
end 

Cela fonctionne très bien si je supprime le retour à l'utilisateur. Cependant, il échoue avec une erreur de rendu multiple quand il est po Je me demandais si quelqu'un sait comment faire cela.

Répondre

2

Vous ne pouvez pas appeler le rendu plusieurs fois. Le rendu doit être utilisé uniquement lorsque la méthode du contrôleur va revenir. Pour que cela fonctionne, vous devrez modifier la façon dont vous faites les choses pour faire des demandes, probablement en utilisant ajax. Ensuite, chaque téléchargement mettra à jour quelque chose sur la page, et javascript exécutera le prochain appel "upload this file, then update". Editer: Je ne suis pas un gars de l'interface, donc je ne peux pas vous donner le code de travail réel pour cela, mais ce serait quelque chose comme ça. Actuellement, vous envoyez plusieurs fichiers en tant que paramètres dans le contrôleur. Vous devez changer cela pour que le backend ne gère qu'un seul fichier à la fois. Cela signifie changer le frontend pour faire des demandes séparées au backend. Vous ne pouvez pas le faire avec juste un formulaire html - vous aurez besoin de javascript. Le contrôleur rendra un rjs pour renvoyer la mise à jour "fichier traité xyz", le code côté client déclenchera un autre téléchargement jusqu'à ce que tous les fichiers ont été téléchargés.

+0

Merci, mais comment puis-je faire une demande qui fournira des commentaires? Des exemples? Merci – Anark

1

Je l'ai utilisé cela avec grand succès: SWFUpload

Il est un contrôle de flash qui fait le téléchargement, vous fournissez le front-end html, si vous utilisez du texte ou une barre%.

1

Si vous utilisez Workling en tant que travailleur en arrière-plan, il peut stocker des informations de progression que vous pouvez ensuite utiliser pour mettre à jour une barre de progression sur votre page en utilisant javascript.

Questions connexes