[RUBY] tutoriel rails Chapitre 7

introduction

Je publierai le processus de progression du tutoriel sur les rails par moi-même.

Cela touche des mots que je n'ai pas compris dans le processus et des erreurs bloquées.

Veuillez signaler toute erreur car il s'agit d'un résultat d'apprentissage personnel.

Puisqu'il s'agit de mon premier article, je pense qu'il y a beaucoup d'endroits difficiles à lire, mais pardonnez-moi s'il vous plaît.

Chapitre 7 Enregistrement des utilisateurs

7.1.2 Ressource utilisateurs

Affichez les informations utilisateur sur une application Web conformément aux conventions d'architecture REST.

Qu'est-ce que REST?


REST fait référence à la modélisation des composants qui composent une application (tels que les utilisateurs et les micro-messages) en tant que «ressources». Ces ressources prennent en charge les opérations CRUD (Create / Read / Update / Delete) et quatre méthodes de requête HTTP de base (POST / GET / PATCH / DELETE) pour les bases de données relationnelles. Faire. Colonne 2.2 (tutoriel sur les rails Extrait du chapitre 2)


En d'autres termes, s'agit-il d'une image qui utilise le modèle des utilisateurs comme ressource et prend en charge à la fois les opérations de données (créer, afficher, mettre à jour, supprimer) et les méthodes de requête (POST / GET / PATCH / DELETE)?

En faisant cela ・ Simplifie les décisions de contrôleur et d'action (S'il s'agit d'une ressource, elle sera définie automatiquement) · Création de pages Web dynamiques (Afficher les informations utilisateur sur une application Web, etc.) Est-il possible de réaliser?

Lorsque vous utilisez le modèle des utilisateurs comme ressource, utilisez le routage

resources :users

Cela semble se remplir.

7.2.2 Formulaire HTML

J'ai créé un nouveau formulaire d'inscription d'utilisateur. Je ne compléterai que les parties difficiles à comprendre.

<%= form_with(model: @user, local: true) do |f| %>
    <%= f.label :name %>
    <%= f.text_field :name %>

    <%= f.label :email %>
    <%= f.email_field :email %>

    <%= f.label :password %>
    <%= f.password_field :password %>

    <%= f.label :password_confirmation, "Confirmation" %>
    <%= f.password_field :password_confirmation %>

    <%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>

form_with envoie une requête XHR «distante» par défaut, mais ici je veux envoyer une requête de formulaire «locale» régulière pour afficher presque certainement un message d'erreur (7.3.3). (tutoriel sur les rails Extrait du chapitre 7)


Qu'est-ce que ça veut dire,,, Qu'est-ce que la demande XHR «à distance» ??

Je l'ai cherché. XHR semble s'appeler Ajax. Et ajax est une communication asynchrone, et grosso modo, il semble qu'il soit possible de changer l'affichage d'une partie de la page sans transition de page par une requête au format js.

référence https://qiita.com/tambo/items/45211df065e0c037d032

Dans le didacticiel sur les rails, il semble que vous souhaitiez envoyer une demande de format html, c'est-à-dire une demande de formulaire local normal, pour afficher presque certainement le message d'erreur. Pourquoi le message d'erreur s'affiche-t-il de manière incertaine avec une demande à distance? Eh bien, je comprends que la demande locale est suffisante pour l'exemple_app que je crée maintenant.

En passant, dans forms_tag et form_for avant rails 5, il semble que la forme par défaut était la forme locale au lieu de la forme distante.


Ensuite, j'ignorais les balises de formulaire HTML, alors je l'ai recherchée.

Article de référence ① http://www.htmq.com/html5/form.shtml Une description approximative des balises de formulaire.

Article de référence ② https://developer.mozilla.org/ja/docs/Learn/Forms/How_to_structure_an_HTML_form L'étiquette est également écrite.


La variable de bloc (f) appelle la méthode qui génère la balise d'entrée pour l'attribut de l'objet (@user dans ce cas) passé au premier argument de form_with.

référence https://rakuda3desu.net/rakudas-rails-tutorial7-2/


Rails sait que la classe de @utilisateur est User. De plus, puisque @user est un nouvel utilisateur, Rails décide que le formulaire doit être construit à l'aide de la méthode post. (tutoriel sur les rails Extrait du chapitre 7)]

J'ai étudié ce que signifie cette partie.

Article de référence ① https://qiita.com/hmmrjn/items/24f3b8eade206ace17e2 Il semble que s'il existe un modèle associé et que @user existe dans la base de données, il passe à l'action de mise à jour, sinon il passe à l'action de création.

Article de référence ② https://pikawaka.com/rails/form_with Cet article était également facile à comprendre.

Si l'instance créée par le contrôleur est nouvellement créée par la nouvelle méthode et ne contient aucune information, elle est automatiquement créée par l'action de création, et si elle dispose déjà des informations, elle est automatiquement créée par l'action de mise à jour. Cela réglera le problème. (Cité de l'article ci-dessus)

Je pense que je l'ai très bien compris ...

7.3.1 Forme correcte

params contient des hachages (hash-of-hashes: hachages imbriqués) pour plusieurs hachages. Dans les informations de débogage, le résultat de la soumission du formulaire est stocké dans le hachage de l'utilisateur avec les attributs correspondant à la valeur soumise. La clé de ce hachage sera la valeur de l'attribut de nom qui était dans la balise d'entrée. Par exemple:

<input id="user_email" name="user[email]" type="email" />

La valeur "user [email]" correspond à la valeur de la clé: email dans le hachage de l'utilisateur. (tutoriel sur les rails Extrait du chapitre 7)]

Un point important ici !!

7.3.2 Strong Parameters

params.require(:user).permit(:name, :email, :password, :password_confirmation)

Quelle est la méthode requise? Spécifiez le groupe de paramètres à recevoir

Quelle est la méthode du permis? Spécifier les noms de paramètres disponibles

référence https://techacademy.jp/magazine/22078

7.3.4 Test de défaillance

Exercice 1 Une erreur est survenue !!

test/integration/users_signup_test.rb


#Liste 7.25:Modèle pour tester les messages d'erreur
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'
    assert_select 'div#<CSS id for error explanation>'
    assert_select 'div.<CSS class for field with error>'
  end
  .
  .
  .
end

Après avoir écrit l'extrait 7.25 et fait un test

ERROR["test_invalid_signup_information", #<Minitest::Reporters::Suite:0x000000000adddc40 @name="UsersSignupTest">, 0.3698949000099674]
 test_invalid_signup_information#UsersSignupTest (0.37s)
Nokogiri::CSS::SyntaxError:         Nokogiri::CSS::SyntaxError: unexpected '#' after '[#<Nokogiri::CSS::Node:0x000000000addfc70 @type=:ELEMENT_NAME, @value=["div"]>]'
            test/integration/users_signup_test.rb:13:in `block in <class:UsersSignupTest>'

Et l'erreur,

Le listing 7.25 a été ajouté

assert_select 'div#<CSS id for error explanation>'
assert_select 'div.<CSS class for field with error>'

Ce sont les deux phrases ci-dessus.

<CSS id for error explanation>

Ah. .. .. Seuls les indices sont écrits ici, et vous devez écrire l'identifiant vous-même ... Alors

assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'

Je l'ai corrigé.

7.4.1 Remplissage du formulaire d'inscription

app/controllers/users_controller.rb


#Liste 7.26:Action de création de l'utilisateur pour enregistrer et rediriger
class UsersController < ApplicationController
  .
  .
  .
  def create
    @user = User.new(user_params)
    if @user.save
      redirect_to @user
    else
      render 'new'
    end
  end

  private

    def user_params
      params.require(:user).permit(:name, :email, :password,
                                   :password_confirmation)
    end
end

redirect_to @user

Je peux comprendre la signification du code ci-dessus, mais j'y ai fait référence car il existe un article qui le décrit en détail.

référence https://qiita.com/Kawanji01/items/96fff507ed2f75403ecb

Cependant, selon le Tutoriel 5.3.2, les conventions Rails utilisent essentiellement des chemins relatifs pour les liens, mais des chemins absolus pour les liens de redirection. (Cité de l'article ci-dessus)

Etait-ce vrai? Quand tu lèves les yeux

Le didacticiel Rails suit les conventions générales et utilise essentiellement le format _path, et uniquement pour les redirections, le format _url. En effet, la norme HTTP nécessite une URL complète lors de la redirection. (tutoriel rails Extrait du chapitre 5)]

C'était vrai ...

7.4.3 Enregistrement réel de l'utilisateur

un problème est survenu !! Pour réinitialiser la base de données

rails db:migrate:reset

Exécuter. Mais il ne peut pas être réinitialisé.

ermission denied @ apply2files - C:/environment/sample_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/Users/81801/environment/sample_app/db/development.sqlite3
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)

Solution Je l'ai résolu en me référant à l'article suivant. https://teratail.com/questions/67393 https://qiita.com/Toshiki23/items/f366504844fd22ad87d9

Apparemment, en utilisant sqlite3 pour la base de données dans Windows commande rails drop rails db: commande de réinitialisation rails db: migrate: commande de réinitialisation Semble poser des problèmes dans. Hélas, les fenêtres ...

Supprimez manuellement le fichier db / development.sqlite3 de l'explorateur de l'éditeur comme décrit dans l'article (car la commande rm n'a pas été suivie à l'invite de commande),

rails db:create db:migrate

Quand je l'ai exécuté à nouveau

Database 'db/development.sqlite3' already exists
Database 'db/test.sqlite3' already exists

Ça aurait dû être effacé, mais ça reste ... Le fichier development.sqlite3 a certainement disparu de l'éditeur que j'utilise ...

,,,,Que devrais-je faire! !! !! !! !! J'ai cherché pour le moment où se trouvait le fichier development.sqlite3 supprimé.

référence https://maitakeramen.hatenablog.com/entry/2018/02/08/131755

Je ne peux pas le trouver pour une raison quelconque lorsque je cherche la poubelle ... (Est-ce parce qu'il n'a pas été supprimé ??)

Je l'ai cherché, et quand j'ai regardé le répertoire sample_app / db de l'explorateur Windows, j'ai trouvé le fichier development.sqlite3 !!

Je l'ai copié dans le répertoire db de l'éditeur ouvert pour le moment.

Lorsque j'ai jeté un coup d'œil aux données avec DB Browser pour SQlite, les données de la table des utilisateurs étaient vides.

J'ai essayé de trouver la cause, mais je n'ai pas compris. Pour le moment, nous avons terminé la réinitialisation de la base de données et passerons à la suivante ...

De côté Après cela, on m'a dit que si j'utilisais Git Bash, je pouvais également utiliser des commandes Linux, et après cela, j'ai décidé de l'utiliser également pour apprendre.

7.4.4 Test réussi

Exercice 2 J'ai pu effacer l'exercice sans aucun problème, mais j'ai recherché l'assistant content_tag. assistant content_tag content_tag (: nom de l'élément, contenu à afficher, option)

référence https://techacademy.jp/magazine/42167

À la fin

Le contenu est soudainement devenu difficile. Il était également difficile de comprendre des concepts tels que les ressources utilisateur qui étaient couramment utilisés dans le didacticiel. Je ne pouvais pas comprendre comment générer un formulaire en utilisant l'aide form_with à la fois, donc je l'ai relu plusieurs fois. J'ai souvent rencontré des erreurs et cela a pris du temps.

Recommended Posts

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 3 Apprentissage
Mémorandum du didacticiel Rails (Chapitre 3, 3.1)
Tutoriel Rails Chapitre 4 Apprentissage
Tutoriel Rails Chapitre 1 Apprentissage
Tutoriel Rails Chapitre 2 Apprentissage
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
rails tutry
tutoriel sur les rails
tutoriel sur les rails
[Tutoriel Rails Chapitre 4] Rubis à saveur de Rails
Test du tutoriel sur les rails
[Tutoriel Rails Chapitre 5] Créer une mise en page
Mémorandum du didacticiel Rails 1
Tutoriel Rails Memorandum 2
Tutoriel de mastication des rails [Chapitre 2 Application jouet]
[Débutant] Tutoriel Rails
Tutoriel Rails (4e édition) Mémo Chapitre 6
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 Chapitre 0: Apprentissage préliminaire des connaissances de base 5
Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3
Rails Tutorial 6e édition Résumé d'apprentissage Chapitre 8
Rubis aromatisé aux rails
Fiche technique du didacticiel Rails
[Rails] Didacticiel Apprendre avec les rails
rails Tutorial Fighting Record III
Tutoriel de mastication des rails [Chapitre 3 Création de pages presque statiques]
Résoudre Gem :: FilePermissionError lors de l'exécution de rails d'installation de gem (Tutoriel Rails Chapitre 1)
11.1 Ressource AccountActivations: Mémorandum du didacticiel Rails - Chapitre 11
Registres du didacticiel Rails et mémorandum n ° 0
J'ai essayé Rails débutant [Chapitre 1]
Tutoriel Rails 4e édition: Chapitre 1 De zéro au déploiement
Résoudre ActiveRecord :: NoDatabaseError lors du test des rails (Tutoriel Rails Chapitre 3)