J'ai une tâche de prise de temps dans mon contrôleur pour laquelle je veux déclencher une barre de progression/état de progression simple dans ma vue.Changer de vue de manière dynamique depuis le contrôleur - Barre de progression avec filetage dans Rails
Dans mon contrôleur j'ai quelque chose comme
threads = []
total.times do |x|
Thread.new {
the_time_taking_task(x)
#Something here to trigger the progressbar in the view
}
end
threads.each { |aThread| aThread.join }
render :action => 'some_action'
Je ne peux pas mettre un rendu là-dedans, car il jette un double render erreur. Je essayé de mettre un rendu et il revenir et je suis arrivé « return can't jump across threads
» erreur
Je suis en train de rendre comme il semble être le seul moyen mon contrôleur peut parler pour voir. Mon approche est-elle incorrecte?
Est-ce que vous voulez quelque chose de simple comme celui-ci dans la vue qui applique la largeur de la barre de progression à travers cet appel
<div style="width: <%= (percent_val)%>px; ">
conseils S'il vous plaît.
Toute tâche en cours d'exécution doit s'exécuter en tant que processus en arrière-plan (de manière asynchrone et non bloquante). Comme @shingara dit utiliser delayed_job ou les goûts de celui-ci. J'ai trouvé que delayed_job est de loin le plus facile à implémenter. Passez en revue les railscasts sur delayed_job. –