2010-02-10 3 views
0

J'ai une partie de mon application qui devra parfois informer l'utilisateur de son action, mais l'application ne connaît pas l'obligation d'informer l'utilisateur avant que le formulaire ait été soumis (ce qui élimine le Javascript). En gros, ce qui se passe est que l'utilisateur télécharge un ou plusieurs fichiers contenant des enregistrements, si le nombre d'enregistrements dans les fichiers est supérieur à X, alors je dois déterminer une taille d'échantillon et utiliser uniquement ce nombre d'articles, le les articles sélectionnés sont choisis au hasard. Le problème que j'ai, c'est qu'il est possible pour l'utilisateur de télécharger des fichiers sur l'action de création, ainsi que l'action d'édition. Auparavant, un utilisateur pouvait télécharger 2 fichiers n'ayant jamais atteint un nombre d'enregistrements supérieur à X, et lors d'une édition récente, ils l'ont fait - et nous devons maintenant créer un ensemble d'échantillons. Ce n'est pas un gros problème, mais parce qu'ils ont créé des articles dans le passé, nous devons maintenant supprimer certains des enregistrements des fichiers précédents, parce que nous créons un ensemble d'échantillons - donc je dois informer le utilisateur de ce qui va arriver. Donc, une fois que l'utilisateur clique sur submit, je détermine le nombre d'enregistrements dans le fichier, et si son plus grand que XI doit afficher un message et l'utilisateur doit cliquer sur continuer ou annuler (idéalement, je pourrais juste rendre une vue ici pour que je puisse fournir de belles informations à l'utilisateur). Si c'est moins de X alors je m'en fous et je continue juste.Création d'une action de création en plusieurs étapes dans Rails

Répondre

2

Vous devriez être en mesure de vérifier le nombre de fichiers après la création et de rediriger si la quantité est supérieure à X. Je suppose que vous savez ce que le current_user est et que vous êtes dans le FileController en téléchargeant des fichiers sur le compte de l'utilisateur actuel.

def create 
    @file = current_user.files.create(params[:file]) 
    if current_user.files.count >= X 
    redirect_to :controller => "files", :action => "too_many_files" 
    else 
    redirect_to file_path(@file) 
    end 
end 
+0

Je pense que cela peut fonctionner .. mon seul souci est que j'utilise le accepts_nested_attributes_for ici, donc la création des fichiers dans le cadre d'un élément imbriqué - laissez-moi travailler avec cela et je vais vous laisser savoir. Tenez-moi au courant si vous pensez à autre chose, merci de votre contribution! – Rabbott

+0

"Rendu et/ou redirection ont été appelés plusieurs fois dans cette action.Veuillez noter que vous ne pouvez appeler que rendre OU rediriger, et au plus une fois par action.Notez que ni rediriger ni rendre terminer l'exécution de l'action, donc si vous voulez pour quitter une action après la redirection, vous devez faire quelque chose comme "redirect_to (...) et revenir". " – Rabbott

+0

Quelle version de Rails? Réécrit dans l'exemple –

Questions connexes