[RUBY] Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 7

Aperçu

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

Que faire dans ce chapitre

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.

Afficher les utilisateurs

Créez et travaillez sur des branches thématiques comme d'habitude. git checkout -b sign-up

Environnement de débogage et de rails

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. image.png

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.

Exercice
  1. Il s'avère qu'il s'agit de l'action de static_pages. image.png

  2. 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

Ressource utilisateurs

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].

Exercice

erb:show.html.erb


<%= @user.name %>,<%= @user.email %><br>
<%= @user.created_at %><br>
<%= @user.updated_at %>

image.png

erb:show.html.erb


<%= @user.name %>,<%= @user.email %><br>
<%= Time.now %>

image.png

méthode de débogage

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.

Exercice
  1. Attachez to_yaml aux paramètres.
(byebug) puts params.to_yaml
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  controller: users
  action: show
  id: '1'
permitted: false
nil
  1. nul car rien n'est défini dans le contrôleur
(byebug) @user
nil

Image gravatar et barre latérale

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. image.png

Ce sera un peu élégant.

Exercice
  1. Je le fais, alors je vais l'omettre.

  2. 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
  1. Affectez à la taille de l'argument du mot-clé (la valeur par défaut est 80)
```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

    1. Vous ne pouvez pas envoyer de données à l'aide d'un formulaire contenant uniquement du HTML.

###É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_messagesLe 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 ↓ image.png

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 @userIl 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 @userPour ê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 @userMais ç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]>
>> 

2.Résultat d'essayer

####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_templatealors'users/show'Vérifiez si le modèle est affiché.

Aussi dans la dernière ligne ceassert_templateJe 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. image.png Il a une clé(https)→ Communiquer avec SSL.

2.Est affiché.(Identique à l'environnement de développement)

Vers le chapitre précédent

Vers le chapitre suivant

Recommended Posts

Tutoriel Rails 6e édition Résumé d'apprentissage Chapitre 10
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 7
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 4
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 9
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 6
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 5
Rails Tutorial 6e édition Résumé de l'apprentissage Chapitre 2
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
Rails Tutorial 6e édition Résumé d'apprentissage Chapitre 8
Tutoriel Rails (4e édition) Mémo Chapitre 6
Tutoriel Rails Chapitre 3 Apprentissage
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
Tutoriel Rails 4e édition: Chapitre 1 De zéro au déploiement
tutoriel rails Chapitre 6
tutoriel rails Chapitre 1
tutoriel rails Chapitre 7
tutoriel rails Chapitre 5
tutoriel rails Chapitre 10
tutoriel rails Chapitre 9
tutoriel rails Chapitre 8
Tutoriel Rails Chapitre 0: Apprentissage préliminaire des connaissances de base 5
[Rails] Didacticiel Apprendre avec les rails
Mémorandum du didacticiel Rails (Chapitre 3, 3.1)
[Tutoriel Rails Chapitre 4] Rubis à saveur de Rails
[Tutoriel Rails Chapitre 5] Créer une mise en page
Tutoriel de mastication des rails [Chapitre 2 Application jouet]
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
tutoriel sur les rails
Seul résumé lié à la configuration du tutoriel Rails
Test du tutoriel sur les rails
Mémorandum du didacticiel Rails 1
Tutoriel Rails Chapitre 1 De zéro au déploiement [Essayer]
Rails Learning jour 3
Tutoriel Rails Memorandum 2
Rails Learning jour 4