[RUBY] Tutoriel Rails 6e édition Résumé de l'apprentissage Chapitre 3

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, un contenu ridicule ou un contenu incorrect peut être écrit. Notez s'il vous plaît. J'apprécierais que vous me disiez implicitement ...

La source Tutoriel Rails

Que faire à partir de maintenant

Nous apprendrons en détail comment créer des applications Rails en créant un exemple d'application de type Twitter Sample_app. Ce chapitre commence par créer un nouveau projet Sample_app.

J'ai écrit des articles en détail jusqu'au chapitre 2, mais après le chapitre 3 La quantité de code augmentera considérablement, alors ce que vous pouvez faire en lisant le tutoriel Rails Je vais l'abréger ...

installer

Réglage initial

Créer une nouvelle Sample_app Mettez à jour le Gemfile. N'oubliez pas - sans production car je ne veux pas réinstaller la gemme pg de production cette fois-ci. Puisqu'il s'agit d'une nouvelle application, initialisez le référentiel Git. READ ME est également réécrit ici. Après avoir réécrit le README, validez-le pour le moment. Créez également un référentiel distant pour Sample_app sur Github. Après avoir créé un référentiel distant, poussez-le Pour l'environnement Cloud9, modifiez development.rb afin que l'application puisse être démarrée localement. Pour le moment, ajoutez simplement le code pour bonjour et affichage du monde comme dans le chapitre 2 et poussez-le vers heroku.

Exercice
  1. README s'affiche automatiquement en bas de la page supérieure du référentiel Github. Bien sûr, vous pouvez ouvrir le fichier et regarder directement image.png
  2. Vous pouvez voir que bonjour, monde! Est affiché. image.png Connaissance des haricots ici Vous pouvez vérifier le nom de domaine de l'application déployée sur heroku avec domaines heroku '' ``.

Page statique

Comme habitude de développement, au lieu de toujours travailler sur la branche principale, créez une branche thématique chaque fois que vous implémentez quelque chose On dit que c'est une bonne habitude de travailler. Ce faisant, il est facile de diviser le travail. Facile à voir le travail Il y a plusieurs avantages. Créez une branche thématique à chaque fois pour prendre l'habitude et travailler

$ git checkout -b static-pages
Génération de pages statiques

Créer à partir du contrôleur pour les pages statiques à la fois

$ rails g controller StaticPages home help 

générer peut être l'abréviation g Il existe d'autres abréviations, et c'est une bonne idée de les retenir.

Commande complète Forme raccourcie
$ rails server $ rails s
$ rails console $ rails c
$ rails generate $ rails g
$ rails test $ rails t
$ bundle install $ bundle

From Rails Tutorial 6e édition https://railstutorial.jp/chapters/static_pages?version=6.0#table-shortcuts

Pour le moment, poussez la branche pages-statiques à distance à ce stade Si vous utilisez l'option -u pour définir l'origine en amont des pages statiques Après cela, vous pouvez faire le même push avec juste `` git push ''.

Lorsque le contrôleur est automatiquement généré avec la commande generate, le fichier routes.rb est également automatiquement mis à jour. Dans ce cas, j'ai créé une action home et une action help avec generate.

routes.rb


Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root "application#hello"
end

Les règles de routage pour les actions d'accueil et d'aide sont définies automatiquement. Démarrez le serveur local et affichez la page d'accueil de static_pages. image.png

Rails fera référence au routeur lorsque vous spécifiez l'URL (cette fois / static_pages / home) Exécutez l'action du contrôleur correspondant. (Action à la maison du contrôleur StaticPages) Après cela, la vue correspondant à l'action est sortie. Le contrôleur de page statique ne change pas de contenu à chaque fois, donc l'action est vide (même contenu de page).

Exercice
$ rails g controller Foo bar baz
  1. L'abréviation d peut également être utilisée pour détruire.
$ rails d controller Foo

Ajustement de page statique

La page d'accueil et la page d'aide créées dans l'état actuel sont complétées en HTML et sont des pages complètement statiques. En d'autres termes, c'est une page qui peut être éditée sans connaissance de Rails. Ici, comme au chapitre 2, vous pouvez obtenir des données utilisateur ou publier des données en fonction du contenu. La connaissance des rails (ERB) est requise pour les actions qui modifient le contenu d'affichage (dynamique).

Commencez par un test

Premier test

Avant d'ajouter la page À propos, rédigez un test pour la page À propos à l'avance. Puisque la commande generate génère automatiquement des tests pour les pages d'accueil et d'aide Tout d'abord, exécutez un test pour confirmer qu'il n'y a pas de problème pour le moment

$ rails t

...

Finished in 6.708000s, 0.2982 runs/s, 0.2982 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

Red Le cycle de développement de test de conduite (TDD) est Ecrire les tests qui échouent (tests pour les fonctionnalités non implémentées, etc.) → Échec (RED) Écrivez le code d'application réel et passez le test écrit précédemment → Succès (VERT) 3 étapes de refactoring (REFACTOR)

Sur cette base, j'écrirai un test de la page À propos que je n'ai pas encore fait

static_pages_controller_test.rb


require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  
  ...
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
  end
end

Ce code envoie une requête GET à la page about de static_pages Je teste le contenu que le code de réponse est 200 OK (succès).

Bien sûr, je n'ai pas encore implémenté de page À propos, donc j'obtiens l'erreur comme prévu.

Green Jetons un œil au message d'erreur

Error:
StaticPagesControllerTest#test_should_get_about:
NameError: undefined local variable or method `static_pages_about_url' for #<StaticPagesControllerTest:0x000055b65cfc03b0>
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

Si vous le lisez en détail Dans StaticPagesControllerTest should_get_about Aucune méthode n'est définie pour static_pages_about_url (il n'y a pas d'URL À propos) Est en colère.

C'est parce que je n'ai pas configuré le routage

Ajoutons le routage à la fois. dans routes.rb get 'static_pages/about'Ajouter. L'ajout d'une route active un assistant appelé static_pages_about_url.

Si vous relancez le test, cette fois

Error:
StaticPagesControllerTest#test_should_get_about:
AbstractController::ActionNotFound: The action 'about' could not be found for StaticPagesController
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

C'est aussi une simple erreur Je suis en colère de ne pas trouver l'action à propos. C'est le résultat de l'ajout d'un routage pour faire référence à l'action about du contrôleur static_pages.

Ajoutons immédiatement une action À propos

  def about 
  end

Écrivez simplement ceci dans le contrôleur static_pages Le contenu de l'action est toujours une page complètement statique comme l'accueil et l'aide, donc elle peut être vide

Si vous exécutez le test avec ceci, cette fois

Error:
StaticPagesControllerTest#test_should_get_about:
ActionController::MissingExactTemplate: StaticPagesController#about is missing a template for request formats: text/html
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

C'est en colère que le modèle about (vue) ne puisse pas être trouvé.

Ceci est également pris en charge par l'ajout d'une vue. Ajoutez about.html.erb dans app / views / static_pages.

Le test réussit (VERT) dans cet état

Finished in 0.976764s, 3.0714 runs/s, 3.0714 assertions/s.
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips

Une page légèrement dynamique

Changez le titre de manière dynamique. Désactiver la mise en page pour l'étude

$ mv app/views/layouts/application.html.erb layout_file

Cette commande renomme et déplace temporairement le fichier de disposition application.html.erb pour le désactiver.

Écrivez d'abord le test de titre Le titre doit changer de page en page, donc le code ressemble à ceci.

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | Ruby on Rails Tutorial Sample App"
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
  end
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | Ruby on Rails Tutorial Sample App"
  end

Sélectionnez la balise de titre et assurez-vous que son contenu correspond. Bien sûr, le test est ROUGE car il n'est pas implémenté

Tout d'abord, réécrivez la vue de la page d'accueil, d'aide, à propos.

Puisque j'ai défini un titre pour chaque page, le test sera VERT.

Finished in 0.062407s, 48.0717 runs/s, 96.1433 assertions/s.
3 runs, 6 assertions, 0 failures, 0 errors, 0 skips

Exercice

  1. Vous pouvez développer la variable en plaçant la variable avec # {} dans la partie (chaîne de caractères) entre guillemets. Cette fois, la chaîne de caractères Ruby on Rails Tutorial Sample App est affectée à la variable, de sorte que la chaîne de caractères est développée. Substituer des variables aux parties communes et permettre de répondre de manière flexible aux changements est une question fondamentale qui ne change dans aucun langage de programmation.
  def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end
  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | #{@base_title}"
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | #{@base_title}"
  end
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | #{@base_title}"
  end

Mise en page et intégration de Ruby

À ce stade, la plupart de la structure HTML (balises de base telles que head) est dupliquée sur toutes les pages d'accueil, d'aide et à propos. Le titre est également le même pour l'exemple d'application du didacticiel Ruby on Rails. Il est important de supprimer cette duplication et DRY.

La méthode de fourniture est dans la vue

symbole,"Chaîne")En spécifiant


 Vous pouvez appeler la chaîne de caractères associée au symbole avec yield.
 Le code Ruby peut être utilisé dans les vues
 La vue est intégrée Ruby [ERB (Embedded RuBy)] est un fichier au format qui vous permet d'intégrer Ruby en HTML.
 Entourez <%%> et exécutez simplement l'instruction à l'intérieur
 La différence est que l'enfermer dans <% =%> exécute l'instruction à l'intérieur et insère le résultat dans le modèle.

 Voici le résultat de la réécriture de la partie titre en utilisant ce mécanisme

```erb
<% provide(:title,"Help") %>
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>

Bien sûr, le test réussit également.

Si cela est laissé tel quel, les parties communes resteront, donc je vais le refactoriser immédiatement. Tout d'abord, activez le fichier de mise en page que vous avez désactivé précédemment

mv layout_file app/views/layouts/application.html.erb

Ensuite, remplacez les balises de titre placées individuellement dans accueil, aide et environ par les balises de titre du fichier de mise en page.

erb:application.html.erb


<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title)%> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

    <%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
    <%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
  </head>

  <body>
    <%= yield %>
  </body>
</html>

Le contenu de la vue de chaque page est remplacé tel qu'il est dans la partie rendement. En d'autres termes, ce qui s'affiche lorsque vous essayez d'afficher chaque page C'est application.html.erb qui charge la vue de chaque page.

Après cela, des éléments supplémentaires tels que les balises html sont laissés dans la vue de chaque page, et en l'état, application.html.erb Puisqu'il sera dupliqué, supprimez les parties inutiles et faites de la vue de chaque page uniquement le contenu.

erb:help.html.erb


<% provide(:title,"Help") %>
<h1>Help</h1>
<p>
  Get help on the Ruby on Rails Tutorial at the
  <a href="https://railstutorial.jp/help">Rails Tutorial help page</a>.
  To get help on this sample app, see the
  <a href="https://railstutorial.jp/#ebook"><em>Ruby on Rails Tutorial</em>
  book</a>.
</p>
Exercice
  1. Écrivez d'abord le test de contact (TDD)

static_pages_controller_test.rb


 
  test "should get contact" do
    get static_pages_contact_url
    assert_response :success
    assert_select "title", "Contact | #{@base_title}"
  end

Après cela, ajoutez le routage des contacts à routes.rb et Ajouter une action de contact à static_pages_controller Créez simplement une vue de contact.

Finished in 1.044651s, 3.8290 runs/s, 7.6581 assertions/s.
4 runs, 8 assertions, 0 failures, 0 errors, 0 skips

Le test réussit également.

Paramètres de routage

Pour le moment, j'ai défini l'action bonjour pour afficher bonjour, monde dans l'URL racine à déployer J'ai créé une page d'accueil cette fois, donc je vais la déplacer là-bas root 'static_pages/home'

Exercice

static_pages_controller_test.rb


  test "should get root" do
    get root_url
    assert_response :success
  end
  1. Ruby peut commenter la ligne en ajoutant # au début de la ligne À propos, Windows peut commenter la ligne avec CTRL + /. Commentez l'URL racine. `` `# root'static_pages # home'```
Error:
StaticPagesControllerTest#test_should_get_root:
NameError: undefined local variable or method `root_url' for #<StaticPagesControllerTest:0x000055d85cb31200>
    test/controllers/static_pages_controller_test.rb:10:in `block in <class:StaticPagesControllerTest>'

J'ai eu une erreur si la méthode root_url n'était pas définie.

Vous pouvez voir que l'assistant root_url peut être utilisé en définissant rootURL.

Résumé de ce chapitre

Depuis que les travaux du chapitre 3 sont terminés Commettre Si vous exécutez le test lors du déploiement, vous n'aurez pas à vous soucier de trouver des bogues après le déploiement.

← 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 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
Résumé du routage Rails 6.0
Rails Learning jour 2
rails db: 〇〇 Résumé
[Débutant] Tutoriel Rails
[Mémo d'apprentissage] Métaprogrammation Ruby 2e édition: Chapitre 3: Méthode
rails d'apprentissage jour 1