Cet article approfondit ma compréhension en écrivant un article de commentaire du tutoriel Rails pour solidifier davantage mes connaissances Cela fait partie de mon étude. Dans de rares cas, il peut contenir un contenu ridicule ou incorrect. Notez s'il vous plaît. J'apprécierais que vous me disiez implicitement ...
La source Tutoriel Rails 6e édition
Puisque le modèle utilisateur a été créé dans le chapitre précédent, la fonction d'enregistrement utilisateur est implémentée. De là, nous allons implémenter une page RESTful.
Créez et travaillez sur des branches thématiques comme d'habitude.
git checkout -b sign-up
Faites en sorte que le fichier de disposition affiche les informations de débogage.
erb:application.html.erb
<!DOCTYPE html>
<html>
<%= render 'layouts/head' %>
<body>
<%= render 'layouts/header' %>
<div class="container">
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>
Rails a trois environnements, chacun test: environnement de test développement: environnement de développement production: environnement de production Dans ce cas, le débogage n'est pas requis dans l'environnement de production ou l'environnement de test. Il est configuré pour afficher les informations de débogage uniquement dans l'environnement de développement.
Depuis que j'ai mis des informations de débogage dans la mise en page, j'ajoute également du CSS.
.debug_dump{
clear: both;
float: left;
width: 100%;
margin-top: 45px;
@include box_sizing;
}
Ici, les règles CSS empaquetées à l'aide de la fonction de mixage de Saas sont chargées.
Jetez un œil aux informations de débogage.
Vous pouvez voir que le contrôleur et l'action sont écrits. Ceux-ci sont inclus dans les paramètres et sont écrits au format YAML. YAML se compose de hachages. Nous confirmerons dans le prochain exercice dans quel format il est écrit.
Il s'avère qu'il s'agit de l'action de static_pages.
to_yaml``` et la méthode y ont le même effet
Convertit les attributs de l'objet utilisateur en YAML.
>> y user.attributes
---
id: 1
name: taketake
email: [email protected]
created_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &1 2020-06-10 12:51:23.959140000 Z
zone: &2 !ruby/object:ActiveSupport::TimeZone
name: Etc/UTC
time: *1
updated_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &3 2020-06-10 13:09:09.579353000 Z
zone: *2
time: *3
password_digest: "$2a$12$xkZDNGfs2Dnjzbm5XxfCfu.sB3I4ug4PFtTHukKdp0EF9YLLsE5Sm"
=> nil
Si implémenté selon le principe de REST, création de données, affichage, mise à jour, suppression Assignez à chaque action en tant qu'opérations HTTP de base (GET, POST, PATCH, DELETE). La page d'affichage des informations sur l'utilisateur fait référence aux ressources avec des attributs qui identifient de manière unique chaque utilisateur. Nom / ID de la ressource de base La page d'affichage de l'utilisateur avec l'ID 1 est / users / 1. (Erreur car le routage n'est pas défini à ce stade)
Ajoutez la ligne suivante à routes.rb pour activer le routage.
users
Cette ligne unique vous donne accès aux actions de base dont vous avez besoin pour les ressources des utilisateurs RESTful.
|Requête HTTP|URL|action|Route nommée|Utilisation|
|:--|:--|:--|:--|:----------------|
|GET|/users|index|users_path|Page de liste de tous les utilisateurs|
|GET|/users/1|show|user_path(user)|Page affichant un utilisateur spécifique|
|GET|/usres/new|new|new_user_path|Nouvelle page utilisateur|
|POST|/users|create|users_path|Action pour créer un utilisateur|
|GET|/users/1/edit|edit|edit_users_path|id=Page pour éditer 1 utilisateur|
|PATCH|/users/1|update|user_path(user)|Action pour mettre à jour l'utilisateur|
|DELETE|/users/1|destroy|user_path|Action pour supprimer l'utilisateur|
From Rails Tutorial 6e édition
https://railstutorial.jp/chapters/sign_up?version=6.0#table-RESTful_users
Depuis que nous avons implémenté le routage, cela fonctionnera si vous créez une page et une action à afficher.
Créez immédiatement un modèle pour la page d'affichage de l'utilisateur (afficher la page).
Puisque nous n'utilisons pas de générateur, créez manuellement show.html.erb dans app / views / users.
#### **`erb:show.html.erb`**
<%= @user.name %>,<%= @user.email %>
La variable @user est utilisée ici, mais elle ne peut pas être utilisée car elle n'est pas définie.
Par conséquent, il peut être utilisé en définissant la variable @user dans l'action show du contrôleur Users.
```rb
def show
@user = User.find(params[:id])
end
Le type de caractère "1" est stocké dans les paramètres [: id], mais il est automatiquement converti en type entier lorsqu'il est spécifié dans l'argument de la méthode find. La partie 1 de / users / 1 de l'URL est stockée dans les paramètres [: id].
erb:show.html.erb
<%= @user.name %>,<%= @user.email %><br>
<%= @user.created_at %><br>
<%= @user.updated_at %>
erb:show.html.erb
<%= @user.name %>,<%= @user.email %><br>
<%= Time.now %>
J'ai pu vérifier l'état de l'application en utilisant la méthode de débogage. Essayez également le débogage à l'aide de la méthode du débogueur.
Si vous branchez le débogueur, vous pouvez vérifier l'état des variables, etc. lorsque le débogueur est lu. Très utile pour le débogage. Si vous obtenez une erreur non identifiée lors du développement futur de l'application, insérez un débogueur et regardez de plus près. Vous connaissez peut-être la cause de l'erreur.
(byebug) puts params.to_yaml
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
controller: users
action: show
id: '1'
permitted: false
nil
(byebug) @user
nil
Si vous utilisez un service appelé Gravatar pour associer une image à une adresse e-mail, vous pouvez simplement configurer le chemin de l'image Gravatar. Un excellent qui enregistre automatiquement les images enregistrées dans Gravatar.
Définissez la méthode gravatar_for. gravatar_for est une méthode d'assistance qui renvoie un fichier image lorsque vous passez un objet utilisateur
def gravatar_for(user)
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
Notez que le dernier image_tag est une valeur de retour implicite, comme dans l'exemple.
Remplacez l'adresse e-mail de l'utilisateur par l'adresse e-mail associée à l'image avec Gravatar.
>> User.first.update_attribute(:email,"[email protected]")
(0.4ms) SELECT sqlite_version(*)
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
(0.1ms) begin transaction
User Update (9.9ms) UPDATE "users" SET "email" = ?, "updated_at" = ? WHERE "users"."id" = ? [["email", "[email protected]"], ["updated_at", "2020-06-11 12:21:07.548685"], ["id", 1]]
(3.1ms) commit transaction
=> true
Modifiez show.html.erb et custom.scss pour vous rapprocher de la maquette.
Ce sera un peu élégant.
Je le fais, alors je vais l'omettre.
Affectez à l'option taille de hachage (la valeur par défaut est 80)
def gravatar_for(user,options={ size: 80})
size = options[:size]
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
```rb
def gravatar_for(user,size: 80)
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
Option de hachage Nom de l'option={hacher}の形式で指定する。ただし入れ子になったhacherなので size = options[:size]Sinon, il ne peut pas être utilisé comme taille. Si vous le spécifiez en tant que variable de mot-clé, vous pouvez spécifier la valeur par défaut, et lorsque la valeur par défaut est spécifiée, Chose pratique que vous pouvez omettre l'argument Vous pouvez l'utiliser comme une version facile à utiliser de l'option hash.
###Formulaire d'inscription utilisateur Étant donné que la page de profil utilisateur est terminée pour le moment, créez un formulaire d'inscription utilisateur.
####form_Utiliser avec form_with prend des objets ActiveRecord et crée un formulaire avec ces attributs. Page créée par l'utilisateur/s'inscrire est des utilisateurs#Parce qu'il est lié au nouveau forme à une nouvelle action_Définissez l'objet Utilisateur requis par avec.
@user = User.new
Créez également des formulaires erb et scss.
#####Exercice
1.
```erb
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_with(model: @user, local: true) do |foobar| %>
<%= foobar.label :name %>
<%= foobar.text_field :name %>
<%= foobar.label :email %>
<%= foobar.email_field :email %>
<%= foobar.label :password %>
<%= foobar.password_field :password %>
<%= foobar.label :password_confirmation, "Confirmation" %>
<%= foobar.password_field :password_confirmation %>
<%= foobar.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
Cela fonctionne toujours, mais Puisque f est utilisé comme abréviation pour form, il n'est pas bon d'utiliser des chaînes de caractères dénuées de sens et non pertinentes telles que foobar.
####Formulaire HTML Résumez brièvement les points.
・ Local:Si true est la valeur par défaut, envoyez en utilisant Ajax. Option pour annuler la transmission par Ajax.
・ L'objet f est pour la méthode correspondant à l'élément de formulaire HTML.@Renvoie le code HTML pour définir les attributs utilisateur.
· Forme_Si vous voulez vérifier le HTML généré par avec, vérifiez la source avec un navigateur. Les utilisateurs de Windows peuvent naviguer avec la touche F12.
・ Si vous spécifiez un type pour le texte, l'adresse e-mail et le mot de passe, les caractères seront masqués s'il s'agit d'un mot de passe ou s'il s'agit d'une adresse e-mail. Il existe des différences telles que le clavier permettant de saisir une adresse e-mail affichée sur un smartphone ou autre.
-Hash initialisé à l'aide de la valeur de l'attribut name de la balise d'entrée(params)Configurer.
· Forme_Faire avec@Lorsque l'utilisateur est spécifié, le processus est divisé selon qu'il s'agit d'un nouvel utilisateur ou d'un utilisateur existant. Cette fois@user est un nouvel objet User que vous venez de créer, donc pour créer un nouvel objet Étant donné que la requête POST est envoyée, l'attribut de méthode de la balise form est également POST.
· Forme_Lorsqu'un formulaire est généré avec avec, du HTML appelé CSRF est automatiquement généré pour éviter les attaques.
#####Exercice
###Échec de l'inscription de l'utilisateur Créez un formulaire qui renvoie une erreur et vous invite à le saisir à nouveau lorsque vous soumettez des données non valides.
####Forme correcte Le contenu saisi sur la nouvelle page du formulaire d'action est envoyé à l'action de création. Le flux de traitement est La page d'inscription remplit le formulaire. ↓ Les données sont envoyées à l'action de création. ↓ Utilisateur dans l'action de création.Créer un objet utilisateur en utilisant new ↓ Enregistrez l'objet utilisateur créé → Définir pour afficher à nouveau la page d'inscription en cas d'échec.
Il y a une telle description dans l'action de création.
user])
Dans cette ligne, les données saisies sur la page du formulaire sont dans le hachage des paramètres:En passant le symbole de l'utilisateur
Peut être remplacé.
#### **`user])`**
```@user = user.new(params[
Ce code fonctionne sur les anciens Rails, mais le nouveau Rails a une vulnérabilité d'affectation de masse, donc
Une erreur se produira.
En guise de contre-mesure, nous utilisons quelque chose appelé paramètres forts.
####Strong Parameters
Dans le code que j'ai écrit plus tôt
#### **`user])`**
```@user = user.new(params[
Il y avait une ligne.
Cette ligne est une implémentation très dangereuse pour la sécurité et a commencé à générer des erreurs depuis Rails 4
Ce qui est dangereux
admin=Inclus dans la demande de publication un attribut qui ne doit pas être modifiable par l'utilisateur, tel que 1.
Tout simplement parce que le contenu de la base de données sera écrasé.
En utilisant StrongParameter, vous pouvez spécifier les paramètres requis et les paramètres autorisés.
Cela permet au contenu de la base de données d'être mis à jour en toute sécurité.
Utilisateur dans une méthode externe pour rendre ce StrongParameter plus facile à utiliser_Il est courant de définir des paramètres.
De plus, cette méthode n'a pas besoin d'être utilisée par des utilisateurs externes, alors écrivez-la en privé. Cela empêchera cette méthode d'être utilisée en externe.
```rb
private
def user_params
params.require(:user).permit(:name,:email,:password,:password_confirmation)
end
En définissant cette méthode et en la transmettant comme StrongParameter, l'erreur ne se produira pas pour le moment. Il n'y a pas de retour car nous n'avons pas encore implémenté le traitement pour un stockage de données réussi et infructueux. Nous allons les mettre en œuvre à partir de maintenant.
#####Exercice 1.
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
admin: '1'
controller: users
action: new
permitted: false
####Message d'erreur Implémentez le message d'erreur lorsque l'inscription de l'utilisateur échoue.
L'objet qui a été pris lors de la vérificationerrors.full_messages
Le message d'erreur est stocké sous forme de tableau dans.
>> user.save
(0.1ms) begin transaction
User Exists? (0.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT ? [["LIMIT", 1]]
(0.1ms) rollback transaction
=> false
>> user.errors.full_messages
=> ["Password can't be blank", "Password can't be blank", "Password is too short (minimum is 6 characters)", "Name can't be blank", "Email can't be blank", "Email is invalid"]
Nouvelle page avec ce message d'erreur(page d'inscription)Sortie en une seule fois avec le formulaire Bootstrap-En ajoutant la classe de contrôle Un affichage d'erreur comme celui-ci est terminé
erb:_error.messages.erb.html
<% if @user.errors.any? %>
<div id="error_explanation" >
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
↑ Erreur nouvellement créée_messages partiels
pluralize(@user.errors.count,"error")
[email protected] multiple(2 ou plus)Dans le cas de, une méthode pratique qui corrige automatiquement les erreurs et les pluriels.
#### **`if @user.errors.any?`**
c'[email protected] s'il y a au moins une erreur dans les erreurs. empty?A l'effet opposé de.
#####Exercice 1.Vous pouvez voir que si vous réécrivez la validation, l'instruction d'erreur changera en conséquence ↓
2.Nouvelle page(nouvelle page)Envoyez le formulaire avec pour sauter pour créer. Parce que create spécifie de dessiner une nouvelle action avec rendu lorsque l'enregistrement des données échoue. L'URL sera celle de la page de création.
#####Test en cas d'échec
Rédigez un test d'intégration pour une série d'opérations d'enregistrement de nouveaux utilisateurs.
rails g integration_test users_signup
users_signup_test.rb
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, params:{user:{name:"",
email:"user@invalid",
password:"foo",
password_confirmation:"bar"}}
end
assert_template 'users/new'
end
end
assert_no_difference 'User.count' do
Arguments avant et après traitement dans le bloc avec(User.count)Vérifiez que la valeur de n'est pas modifiée.
#### **`{~`**
```post users_path,params {user
Dans les paramètres d'action de création[:user]La valeur du(Valeur d'entrée du formulaire)Est envoyé.
#####Exercice
1.Si vous remplissez le modèle, il ressemble à ceci
```rb
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, params:{user:{name:"",
email:"user@invalid",
password:"foo",
password_confirmation:"bar"}}
end
assert_template 'users/new'
assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'
end
Alerte CSS si vous souhaitez ajouter plus de détails-Vous pouvez tester le danger, etc.
assert_select 'div.alert-danger'
####Remplir le formulaire d'inscription
À ce stade, les données invalides peuvent être traitées, mais les données valides ne peuvent pas être traitées.
Lorsque j'entre des données valides et que je les soumets, cela se fige.
No template found for UsersController#create, rendering head :no_content Completed 204 No Content in 348ms (ActiveRecord: 8.5ms | Allocations: 6337)
Cela est dû au fait que l'action de création n'a pas de vue valide.
Parce que l'action charge la vue correspondante lorsque le processus est terminé
Si les données sont valides```if @user.save```Parce que cela devient vrai et que le traitement de l'action se termine tel quel
Allez lire la vue de création. Une erreur se produit car la vue de création n'a pas été créée.
Mais cette fois, l'action de création crée un nouvel utilisateur(Enregistrer dans la base de données)J'espère que je peux le faire, donc je ne fais pas de vue
Après avoir enregistré l'utilisateur, accédez à la page de profil de l'utilisateur créé.
```rb
def create
@user = User.new(user_params)
if @User
redirect_to @user ## redirect_to est une méthode qui redirige vers la page spécifiée
else
render 'new'
end
end
iciredirect_to @user
Il y a une ligne
cette,Point insignifiant!!
Si vous ne le comprenez pas ici, cela continuera????En raison de la condition
Points que je veux que vous fassiez de votre mieux pour comprendre...
redirect_to @user
Pour être exactredirect_to user_path(@user)
Sera.
Passer un objet pour la ressource Utilisateur profilera cet utilisateur(Page individuelle)Vouloir voir
Parce que Rails devinera pour vousredirect_to @user
Mais ça marche.
C'est une fonction d'efficacité, mais nous, débutants, devrions le pardonner car cela provoque un colmatage.
C'est pratique à retenir, alors comprenons bien.
#####Exercice 1.
>> User.create(name:"Anpanman",email:"[email protected]",password:"foobar",password_confirmation:"foobar")
(1.4ms) SELECT sqlite_version(*)
(0.1ms) begin transaction
User Exists? (0.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "[email protected]"], ["LIMIT", 1]]
User Create (3.9ms) INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest") VALUES (?, ?, ?, ?, ?) [["name", "Anpanman"], ["email", "[email protected]"], ["created_at", "2020-06-13 14:33:31.718157"], ["updated_at", "2020-06-13 14:33:31.718157"], ["password_digest", "$2a$12$WJ1/TrXoJLq.c3Q9KetVq.h4VmV6cTkrGf92wzQcpigckRj1ZCKPm"]]
(18.0ms) commit transaction
=> #<User id: 4, name: "Anpanman", email: "[email protected]", created_at: "2020-06-13 14:33:31", updated_at: "2020-06-13 14:33:31", password_digest: [FILTERED]>
def create
@user = User.new(user_params)
if @user.save
redirect_to user_url(@user)
else
render 'new'
end
end
Cela fonctionne toujours de la même manière.
####flash Si vous avez créé un utilisateur, "L'utilisateur a été créé".!"Et Une fois supprimé, il sera affiché pendant une courte période jusqu'à ce que vous vous déplaciez de l'intérieur de la page, tel que «Supprimé». Afficher un message d'état. C'est aussi le message que la publication a réussi.
Si vous souhaitez créer un message temporaire qui n'apparaît que sur la même page comme celle-ci, dans Rails Utilisez une variable spéciale appelée flash.
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "Welcome to the Sample App!"
redirect_to user_url(@user)
else
render 'new'
end
end
flash[:success]Stockez le message lorsque la création de l'utilisateur est réussie. En faisant cela, le message ne peut être affiché qu'une seule fois à la destination de la redirection.
Après cela, uniquement lorsque le message attribué au flash est incorporé dans la mise en page et que le flash existe Spécifie d'afficher le flash.
<% flash.each do |message_type,message| %>
<div class="alert alert-<%=message_type %>"><%= message %></div>
<% end %>
#####Exercice 1.Si vous mettez un symbole dans le développement d'expression de la chaîne de caractères:Sera retourné
>> "#{:success}"
=> "success"
2.Je sens que la réponse est sortie même si on me demandait d'y réfléchir, mais elle est expliquée. :avec clé de succès:La clé de danger est un symbole Lorsqu'un symbole est affecté à l'expansion d'expression d'une chaîne de caractères, la sortie sans: est sortie.
>> flash = { success: "It worked!", danger: "It failed." }
=> {:success=>"It worked!", :danger=>"It failed."}
>> flash.each do |key, value|
?> puts "#{key}"
>> puts "#{value}"
>> end
success
It worked!
danger
It failed.
=> {:success=>"It worked!", :danger=>"It failed."}
####Enregistrement réel de l'utilisateur Le contenu de la base de données peut être perturbé, alors essayez de la réinitialiser pour le moment.
rails db:migrate:reset
Lorsque vous créez un nouvel utilisateur dans le formulaire après la réinitialisation
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/105342b5-6c00-ffa8-c370-b1ce3161b0cc.png)
Le message de bienvenue flash est vert(alert-classe de réussite)S'affiche et l'utilisateur est créé.
Ce message de bienvenue disparaît lorsque la page est rechargée.
#####Exercice
1.
```irb
>> User.find_by(email:"[email protected]")
(0.4ms) SELECT sqlite_version(*)
User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "[email protected]"], ["LIMIT", 1]]
=> #<User id: 1, name: "take", email: "[email protected]", created_at: "2020-06-14 02:57:10", updated_at: "2020-06-14 02:57:10", password_digest: [FILTERED]>
>>
####Test de réussite J'ai écrit le test quand il a échoué, alors j'écrirai ensuite le test quand il réussira.
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post users_path, params:{user:{name:"sample",
email:"[email protected]",
password:"foobar",
password_confirmation:"foobar"}}
end
follow_redirect!
assert_template 'users/show'
end
assert_À la différence, testez que le premier argument change par le deuxième argument avant et après le traitement dans le bloc.
Autrement dit, envoyez des informations valides créées par l'utilisateur à la page de création pour vérifier que l'utilisateur est réellement créé.
follow_redirect!
Est une méthode pour se déplacer vers la destination de la redirection.
Cette méthode vous mènera à la page de présentation de l'utilisateur que vous avez créé à ce stade
assert_template
alors'users/show'Vérifiez si le modèle est affiché.
Aussi dans la dernière ligne ceassert_template
Je teste la page d'exposition dans son ensemble en exécutant.
En d'autres termes, même si une erreur se produit sur la page d'affichage ou si elle ne s'affiche pas correctement, elle sera affichée comme une erreur.
Cette ligne confirme les fonctions importantes.
#####Exercice 1.Les tests de texte peuvent facilement se casser si le texte est incorrect ou si vous modifiez le texte lui-même Cette fois, je vais tester qu'il y a une déclaration en flash.
assert_not flash.empty?
2.```<%= content_tag(:div,message,class:"alert alert-#{message_type}") %>```
Dans cette ligne, l'élément est le premier argument(élément div)Spécifiez, le contenu de l'élément avec le deuxième argument(Contenu textuel)Spécifier,
Spécifiez la classe dans le troisième argument. Ce faisant, il est facile à comprendre et concis car il ne peut être écrit qu'avec erb.
3.Il n'y a pas de destination à rediriger(non précisé)Mettez-vous en colère.
RuntimeError: RuntimeError: not a redirect! 204 No Content test/integration/users_signup_test.rb:26:in `block in class:UsersSignupTest'
4.Pour le test qu'un utilisateur supplémentaire est envoyé lorsque des informations utilisateur valides sont envoyées
Puisque l'action de création a été réécrite à false, la ligne qui crée l'utilisateur n'est pas exécutée, donc même dans le test
#### **`"User.count" didn't change by 1.→User.Je me fâche que le décompte n'ait pas changé.`**
FAIL["test_valid_signup_information", #<Minitest::Reporters::Suite:0x0000559122566bd0 @name="UsersSignupTest">, 1.1665384099906078]
test_valid_signup_information#UsersSignupTest (1.17s)
"User.count" didn't change by 1.
Expected: 1
Actual: 0
test/integration/users_signup_test.rb:20:in `block in <class:UsersSignupTest>'
###Déploiement professionnel Avec la mise en œuvre de ce chapitre, vous pouvez réellement créer des utilisateurs et les enregistrer dans la base de données. Ajoutez des paramètres pour l'enregistrement sécurisé des utilisateurs. Commencez par valider et pousser Git comme d'habitude.
####SSL dans l'environnement de production Lorsque vous créez réellement un utilisateur dans l'environnement de production, les données saisies dans le réseau circuleront, mais si elles ne sont pas chiffrées Les informations qui ne devraient pas être divulguées, telles que les mots de passe et les adresses e-mail, sont facilement capturées. Pour éviter cela, dans l'environnement de production, en chiffrant à l'aide de SSL Renforcez la sécurité des sites Web ultérieurs.
Vous pouvez communiquer en toute sécurité avec https en forçant le navigateur à utiliser SSL.
config.force_ssl = true
production.Activez simplement cette ligne commentée dans rb et vous avez terminé.
Tout ce que vous avez à faire est de configurer SSL sur votre serveur
Si vous possédez votre propre domaine, vous devez acheter et configurer un certificat SSL
Piggyback sur le SSL d'Heroku(herokuapp.com)Vous pouvez facilement utiliser SSL
####Serveur Web pour environnement de production
Le serveur Web de l'environnement de production est WEBrick par défaut, mais il est vulnérable à l'augmentation du trafic.
Passez à un serveur Puma qui résiste bien à un trafic important.
Depuis Rails 5 et versions ultérieures, Puma peut être utilisé par défaut.
Tout ce que vous avez à faire est de créer un fichier de configuration pour exécuter Puma.
#### **`database.yml`**
```yml
SQLite. Versions 3.8.0 and up are supported.
gem install sqlite3
Ensure the SQLite 3 gem is defined in your Gemfile
gem 'sqlite3'
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
Warning: The database defined as "test" will be erased and
re-generated from your development database when you run "rake".
Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3
production:
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://railsguides.jp/configuring.html # Connexions à la base de données du pool
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
database: sample_app_production
username: sample_app
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>
Le document officiel de Heroku contient également diverses informations sur cette période, je vais donc mettre un lien pour référence Documentation officielle Heroku(Rails)
#####Exercice 1. Il a une clé(https)→ Communiquer avec SSL.
2.Est affiché.(Identique à l'environnement de développement)
Recommended Posts