Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~

introduction

Cette fois, c'est une continuation de l'article précédent.

Veuillez consulter l'article précédent si vous le souhaitez.

Apprenons la validation cette fois.

Explication de Ruby sur rails pour les débutants ①

Explication de Ruby on rails pour les débutants ② ~ Création de liens ~

Explication de Ruby on rails pour les débutants ③ ~ Création d'une base de données ~

Explication de Ruby on rails pour les débutants ④ ~ Comment utiliser les règles de nommage et form_Tag ~

Explication de Ruby on rails pour les débutants ⑤ ~ Modification et suppression de la base de données ~

Créer un nouveau contrôleur

Créons un nouveau contrôleur.

Cette fois, nous allons créer un contrôleur de publications qui gère les publications. Exécutez le code suivant dans le terminal.

rails g controller posts all

Assurez-vous de voir tous vos messages dans le fichier all.html.erb.

Pour ce faire, créez un fichier qui crée une nouvelle publication. Créons un fichier new.html.erb dans le fichier posts.

image.png

Nous allons créer de nouveaux articles avec ce fichier new.html.erb.

Créer un nouveau modèle

Créons maintenant une base de données pour gérer les publications. Cette fois, je n'ai pas encore créé de base de données, je vais donc la créer à partir du modèle.

Un modèle est un «mécanisme pour manipuler les informations de la base de données», et peut également être appelé une «classe qui interagit avec la base de données».

Les modèles sont généralement nommés au singulier en commençant par une lettre minuscule. Parce qu'il n'y a qu'un seul modèle de table.

 rails g model post content: string

Lorsque vous créez un modèle comme celui-ci, un fichier de migration, qui est un dessin de conception de la base de données, est créé en même temps.

Exécutons le fichier de migration avec le code suivant.

rails db:migrate

Vérifions la table créée à partir de la console de base de données.

rails dbconsole
.table

ar_internal_metadata schema_migrations
posts users

La table des publications a été créée. Jetons un coup d'œil au contenu avec le code suivant.

.schema posts

CREATE TABLE IF NOT EXISTS "posts" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "content" varchar, "string" varchar, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL);

Créer un post

Ajoutons le code pour créer l'article dans le fichier new.html.erb.

new.html.erb


<%= form_tag("/posts/create") do  %>  
  <textarea name="content" cols="30" rows="10"></textarea>
  <input type="submit" value="Envoyer">
<% end %>

image.png

J'envoie une demande de publication à l'URL / posts / create. Les données à l'intérieur de la zone de texte sont stockées dans les paramètres [: content] et envoyées.

Parcourons comme suit.

routes.rb


post "posts/create" => "posts#create"

Il est acheminé vers l'action de création du contrôleur de messages. Pour stocker les données textarea dans la table posts, codez le contrôleur posts comme suit:

posts_controller.rb


def create
  post = Post.new(content: params[:content])
  post.save
  redirect_to("/posts/new")
end

Vous pouvez maintenant enregistrer les données dans le tableau des publications.

Remplissez la zone de texte comme indiqué ci-dessous et appuyez sur le bouton Soumettre.

image.png

Vérifions la base de données. Tapez le code suivant dans le terminal.

rails dbconsole
.header on
select * from posts;

id|content|string|created_at|updated_at 1|pocomaru||2020-05-23 10:37:51.509719|2020-05-23 10:37:51.509719

De cette façon, nous avons pu stocker le message dans la base de données.

Paramètres de validation

La validation est une contrainte placée sur le stockage des données dans la base de données.

Par exemple, lorsque vous vous connectez à un site, vous pouvez vous connecter même si votre adresse e-mail et votre mot de passe sont vides, n'est-ce pas?

Il existe pour empêcher une telle chose.

La validation est définie sur le modèle.

Définissons-le réellement.

Empêcher les publications vides

Envisagez la validation pour éviter les publications vides.

Comme c'est la table des articles qui stocke les articles, cette validation est effectuée dans la classe Post du modèle d'article.

Le modèle de publication est le suivant par défaut.

post.rb


class Post < ApplicationRecord
end

La validation est écrite dans le format suivant

valide: nom de la colonne, {contenu de validation}

La validation pour empêcher les publications vides est la suivante.

post.rb


class Post < ApplicationRecord
end

La validation est écrite dans le format suivant

valide: nom de la colonne, {contenu de validation}

La validation pour empêcher les publications vides est la suivante.

post.rb


class Post < ApplicationRecord
    validates :content, {presence: true}
end

Cela a empêché les messages vides.

Si vous êtes bloqué dans la validation, vous ne pourrez pas enregistrer. En outre, si l'enregistrement réussit, True sera renvoyé comme valeur de retour et si l'enregistrement échoue, False sera renvoyé comme valeur de retour.

Réécrivons le contrôleur de messages comme suit.

posts_controller.rb


def create
  post = Post.new(content: params[:content])
  if post.save
    redirect_to("/posts/all")
  else
    redirect_to("/posts/new")
  end

En réécrivant le code de cette manière, il redirige vers / posts / all si la sauvegarde réussit et vers / posts / new si la sauvegarde échoue.

Vous avez maintenant créé une validation qui élimine les messages vides.

Ensuite, créons une validation qui supprime plus d'un certain nombre de caractères.

Empêcher plus d'un certain nombre de caractères

Cette fois, définissons une validation qui empêche la publication de 20 caractères ou plus.

Ce sera comme suit.

post.rb


class Post < ApplicationRecord
    validates :content, {presence: true}
    validates :content, {length: {maximum: 20}}
end

Cette partie valide: contenu, {longueur: {maximum: 20}} vous permet de limiter les messages de 20 caractères ou plus.

Cependant, il y a un problème si vous définissez simplement la validation comme ceci. Lorsque je poste plus de 20 caractères, la zone de texte devient vide.

La raison est dans le contrôleur des postes. Lorsque la validation est interceptée et que redirect_to (" / posts / new ") est appelé, le routage effectuera une nouvelle action sur le contrôleur de messages. Ensuite, la variable d'instance ne peut pas être envoyée au fichier new.html.erb, et la zone de texte que j'ai écrite en dur sera vide.

Pour éviter cela, nous utilisons une méthode appelée render.

Le rendu est une méthode qui peut être rendue, et le rendu consiste à demander au navigateur de lire le fichier de vue et de le dessiner.

Si vous utilisez la méthode de rendu dans un fichier de vue, vous pouvez utiliser un modèle partiel qui dessine les parties communes de plusieurs fichiers de vue.

En l'utilisant dans le contrôleur cette fois, vous pouvez passer la variable d'instance créée au fichier de vue en effectuant un rendu sans passer par une action.

Réécrivons le contrôleur de messages comme suit.

def create
  post = Post.new(content: params[:content])
  @content = params[:content]
  if post.save
    redirect_to("/posts/all")
  else
    render("posts/new")
  end
end

Après avoir stocké le contenu du message dans @ content, je dessine un fichier new.html.erb en utilisant render au lieu de redirect_to.

De cette façon, vous pouvez passer la variable d'instance «@ content» à new.html.erb.

Pour afficher cette variable d'instance dans le fichier new.html.erb, réécrivez-la comme suit:

new.html.erb


<%= form_tag("/posts/create") do  %>  
  <textarea name="content" cols="30" rows="10"><%= @content%></textarea>
  <input type="submit" value="Envoyer">
<% end %>

Nous transmettons «@ content» à la valeur initiale de la zone de texte. Vous pouvez maintenant voir la valeur lorsque vous êtes bloqué dans la validation.

Essayons-le.

image.png

Entrez au moins 20 caractères comme indiqué ci-dessous et appuyez sur envoyer.

image.png

Rien de particulier ne change.

image.png

À la fin

C'est tout pour cette fois.

Merci pour votre relation.

Veuillez consulter les articles suivants si vous le souhaitez.

Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation de flash ~

Recommended Posts

Explication de Ruby sur rails pour les débutants ⑥ ~ Création de validation ~
Explication de Ruby sur rails pour les débutants ①
Explication de Ruby on rails pour les débutants ② ~ Création de liens ~
Explication de Ruby on rails pour les débutants ⑦ ~ Implémentation Flash ~
Explication de Ruby on rails pour les débutants ③ ~ Création d'une base de données ~
Explication de Ruby on rails pour les débutants ⑤ ~ Modifier et supprimer la base de données ~
[Procédure 1 pour les débutants] Ruby on Rails: Construction d'un environnement de développement
Explication de Ruby on rails pour les débutants ④ ~ À propos des règles de dénomination et comment utiliser form_Tag ~
Paramètres de validation pour la fonction de connexion Ruby on Rails
Création de portfolio Ruby on Rails
Résumé de la validation Ruby on Rails
Connaissance de base de Ruby on Rails
[Ruby on Rails] Création de la page de confirmation
[Ruby on Rails] Introduction des données initiales
Commande de création / suppression de modèle Ruby on Rails
Nouvelle commande de création de l'application Ruby on Rails
[Ruby on Rails] Notation japonaise de l'erreur
[Ruby on rails] Implémentation d'une fonction similaire
Débutant a créé un portfolio avec Ruby on Rails
Une série de flux de création de table → création, suppression d'enregistrement → suppression de table dans Ruby on Rails
Implémentation de la fonction de connexion Ruby on Rails (Session)
[Manuel de procédure pour débutant 2] Ruby on Rails: Création d'un modèle Rails
[Ruby on Rails] Jusqu'à l'introduction de RSpec
Recommandation de classe de service dans Ruby on Rails
[Ruby on Rails] Mémo d'introduction Select2 pour Webpacker
Ruby on Rails ~ Principes de base de MVC et du routeur ~
[Ruby on Rails] Un mémorandum de modèles de mise en page
[Rails] Procédure de liaison de bases de données avec Ruby On Rails
[Ruby on Rails] Affichage individuel des messages d'erreur
Ruby on Rails élémentaire
Principes de base de Ruby on Rails
Association Ruby On Rails
[Ruby on Rails] Communication asynchrone de la fonction de publication, ajax
Implémentation de la fonction de connexion Ruby on Rails (édition de devise)
Essayez d'utiliser l'attribut de requête Ruby on Rails
[Ruby on Rails] Implémentation de la validation qui ne fonctionne que lorsque les conditions sont remplies
Record d'apprentissage de Ruby on rails -2020.10.03
Record d'apprentissage Ruby on rails -2020.10.04
Record d'apprentissage de Ruby on rails -2020.10.09
Record d'apprentissage Ruby on rails-2020.10.07 ②
(Pour les débutants) [Rails] Installer Devise
Record d'apprentissage Ruby on rails-2020.10.07 ①
Annuler la migration de Ruby on Rails
Record d'apprentissage de Ruby on rails -2020.10.06
Mémorandum de base Ruby on Rails