[RUBY] Comment refléter l'erreur de validation et saisir le contenu sur la page précédente sans utiliser le rendu dans l'action

introduction

Si vous êtes bloqué dans la validation lors de la soumission du contenu du formulaire Rendre le nouvel écran de publication avec la méthode render Il devrait y avoir beaucoup de gens qui ont appris en affichant l'erreur ou le contenu qui a été entré

Mais que faire si vous ne pouvez pas utiliser la méthode render? En fait, j'utilise l'API Google Map pour le portefeuille sur lequel je travaille. Lors du rendu d'une page avec render, il y a un problème que MAP ne soit pas affiché pour une raison quelconque ...

C'était un problème qui pouvait être résolu en modifiant les spécifications, mais je ne voulais pas le changer. Je vais vous montrer comment réaliser le mouvement ci-dessus sans utiliser render.

Normalement lors de l'utilisation du rendu

À titre d'exemple dans tasks_controller.rb Nouvelle action de page de publication nouveau et Supposons que vous ayez une action create qui enregistre un nouveau message.

tasks_controller.rb



def create
  @task = Task.new(task_params)
  if @task.save
    redirect_to @task, notice: 'Vous avez enregistré la tâche.'
  else
    render :new
  end
end

@ task.save échoue et render: new sous ʻelseest exécuté, La nouvelle page de publication sera rendue. Après cela, comme vous le savez déjà, vous avez l'impression d'utiliser@ task.errors.full_messages` dans la vue.

Lorsque vous n'utilisez pas le rendu

Cela prend la forme d'un ré-accès avec redirect_to Les instructions d'erreur et le contenu d'entrée sont stockés dans flash dans l'action.

tasks_controller.rb



def create
  @task = Task.new(task_params)
  if @task.save
    redirect_to @task, notice: 'Vous avez enregistré la tâche.'
  else
    flash[:error_msgs] = @task.errors.full_messages
    flash[:tmp_body] = @task.body
    redirect_to new_task_url
  end
end

Une déclaration d'erreur dans flash [: error_msgs] Le contenu du texte est stocké dans flash [: tmp_body].

Après cela, c'est OK si vous utilisez la valeur de flash dans la vue de destination d'accès. c'est tout!

Recommended Posts

Comment refléter l'erreur de validation et saisir le contenu sur la page précédente sans utiliser le rendu dans l'action
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
Comment faire un clic droit en utilisant la saisie au clavier dans RPA?
[Super facile! ] Comment afficher le contenu des dictionnaires et des listes incluant le japonais en Python
Comment générer une requête à l'aide de l'opérateur IN dans Django
Comment obtenir toutes les clés et valeurs du dictionnaire
Remarques sur l'utilisation de la guimauve dans la bibliothèque de schémas
Comment copier et coller le contenu de la ligne de commande avec bash sous Linux ou Mac sans souris
Comment retourner les données contenues dans le modèle django au format json et les mapper sur le dépliant
Comment émettre intentionnellement une erreur dans le shell pendant les tests
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
Comment obtenir des abonnés et des abonnés de Python à l'aide de l'API Mastodon
[EC2] Comment installer Chrome et le contenu de chaque commande
Comment déterminer qu'une clé croisée a été entrée dans Python3
[TensorFlow 2] Comment vérifier le contenu de Tensor en mode graphique
Comment utiliser la fonction de rendu définie dans .mako (.html) directement dans mako
Comment afficher les octets de la même manière en Java et Python
Comment saisir une chaîne de caractères en Python et la sortir telle quelle ou dans la direction opposée.
Comment refléter CSS dans Django
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment connaître le nombre de processeurs sans utiliser la commande sar
Comment obtenir la différence de date et d'heure en secondes avec Python
Comment comparer si le contenu des objets dans scipy.sparse.csr_matrix est le même
Comment éliminer les erreurs d'activation de conda sans modifications ennuyeuses de la politique d'exécution
TLE semblait effrayant en fonction de la manière dont l'entrée était reçue