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 ~
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.
Nous allons créer de nouveaux articles avec ce fichier new.html.erb.
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);
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 %>
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.
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.
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.
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.
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.
Entrez au moins 20 caractères comme indiqué ci-dessous et appuyez sur envoyer.
Rien de particulier ne change.
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