Points à retenir et concepts dans le didacticiel Ruby on Rails

introduction

J'ai étudié Rails pour changer d'emploi en une société de développement interne basée sur le Web! Dans le cadre de cette étude, je fais la 6ème édition du tutoriel Rails, et je mentionnerai que je pensais que c'était __ important & __ à retenir.

Termes et concepts de base de Ruby et Rails

★ Qu'est-ce qu'un bijou? ――Le paquet Ruby publié par Ruby Gems

★bundle install --Une commande pour installer ce qui est nécessaire pour le développement avec Rails décrit dans Gemfile

★rails db:migrate --Fonctions utilisées lors du changement de structure (table, colonne) de la base de données utilisée par les rails ・ Flux approximatif d'utilisation des rails db: migrer

  1. Créez un fichier de migration et décrivez le contenu
  2. Apportez des modifications à la base de données en exécutant séquentiellement des migrations avec la commande $ rails db: migrate

Chapitre 5 Création d'une mise en page

5.2.1 Pipeline d'actifs

__ Le pipeline d'actifs est divisé en trois fonctions principales (ci-dessous). __ (* Explication ★ Bref résumé)

[Le plus grand avantage du pipeline d'actifs] Les actifs optimisés pour l'efficacité des applications de production sont également générés automatiquement. (= Cela chargera automatiquement la page plus rapidement dans l'environnement de production.) Ce faisant, il est possible de maintenir «la lisibilité des fichiers dans l'environnement de développement» et de fournir l'environnement le plus solide pour chacun dans deux environnements différents, «dans l'environnement de production, augmenter la vitesse d'exécution de l'application». ★ En bref, «l'environnement de développement» et «l'environnement de production» sont optimisés, et c'est le plus efficace / pratique.

  1. Répertoire des ressources
  1. Fichier manifeste
 *= require_tree . #app/assets/J'essaye d'inclure tous les fichiers CSS dans les feuilles de style
 *= require_self  #Fichier manifeste(application.css)J'essaye de m'inclure

Sporockets lit les commentaires ci-dessus dans le fichier manifeste.

  1. Moteur de préprocesseur

★ En bref, les actifs sont regroupés pour faciliter leur utilisation dans le navigateur.

5.3.4 Test de lien

    assert_select "a[href=?]", help_path, 
<a href="/help”>...</a>
    assert_select "a[href=?]", root_path, count: 2

Count signifie qu'il existe deux liens vers root_path et que deux sont testés.

Il existe différentes manières de spécifier assert_select. Voici quelques exemples typiques. image.png

Résumé du chapitre 5

Chapitre 6 Création d'un modèle utilisateur

6.1 Modèle utilisateur

Enregistrement actif: la bibliothèque Rails par défaut qui interagit avec la base de données

Lors de la création d'un modèle, utilisez la commande générer un modèle. Exemple) Création d'un modèle utilisateur avec des attributs tels que le nom et l'adresse e-mail

$ rails generate model User name:string email:string

[Convention de dénomination des rails] --Nom du contrôleur: Multiple (Exemple: Utilisateurs) --Nom du modèle: forme unique (exemple: utilisateur) └ Parce que le modèle représente un utilisateur --Nom de la table: multiple └Parce que la table (DB) contient des informations sur plusieurs utilisateurs

6.1.3 Créer un objet utilisateur

--user = User.new: Créer une instance --user.save: Enregistrer le modèle

>> user = User.new(name: "Michael Hartl", email: "[email protected]")
>> user.save

--User.create: Comment créer et enregistrer un modèle en même temps via Active Record

>> User.create(name: "Another Sky”, email: "[email protected]")

--Accès au modèle (<nom de l'objet>. ) Exemple)

>> user.name
=> "Michael Hartl"
>> user.email
=> "[email protected]"
>> user.updated_at
=> Mon, 23 May 2016 19:05:58 UTC +00:00
>> User.find(1)
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">
>> User.find_by(email: "[email protected]")
=> #<User id: 1, name: "Michael Hartl", email: "[email protected]",
created_at: "2019-08-22 01:51:03", updated_at: "2019-08-22 01:51:03">

6.2 Valider les utilisateurs

Cas de validation souvent utilisé dans Active Record

  1. Présence
  2. Longueur
  3. Format
  4. Unicité

__ Comment procéder aux tests de développement pilotés par les tests __

  1. Créez un objet modèle valide
  2. Changer intentionnellement l'un de ses attributs en attribut non valide
  3. Tester si la validation échoue
  4. Pour être prudent, commencez par rédiger un test de l'état au moment de la création et vérifiez également si le premier modèle est valide.
  5. En testant en 4., lorsque le test de validation échoue, vous pouvez vérifier s'il y avait un problème avec l'implémentation de la validation ou l'objet lui-même.

rails test: models: commande pour exécuter uniquement des tests sur les modèles

$ rails test:models

6.3.1 Mot de passe haché

Le nom de la migration peut être spécifié librement. En spécifiant la fin (to_users), Rails créera automatiquement une migration qui ajoute des colonnes à la table des utilisateurs.

Exemple) Pour générer un fichier de migration appelé add_password_digest_to_users, exécutez la commande suivante.

$ rails generate migration add_password_digest_to_users password_digest:string

Résumé du chapitre 6

--Active Record vous donne de nombreuses méthodes pour créer et manipuler des modèles de données.

Chapitre 7 Enregistrement des utilisateurs

7.3.3 Message d'erreur

"Partagé": les partiels utilisés par plusieurs vues sont des répertoires dédiés

7.3.4 Test en cas de panne

assert_select: la cible du test est CSS ・ Pour la classe → id nom de la div # CSS

assert_select 'div#error_explanation'

Pour classe → div.CSS nom de classe

assert_select 'div.field_with_errors'

7.6.1 Résumé de ce chapitre

Chapitre 8 Mécanisme de connexion de base

8.1 Session

--_ __ HTTP est un protocole sans état __ --Un protocole sans gestion d'état

8.1.5 Test flash

Qu'est-ce que assert_template: Teste si l'URL après assert_template rend la vue.

    assert_template 'sessions/new'

Colonne 8.1. 「||=Quel est "?"

Ruby est conçu pour regarder nil et faux et rendre chaque objet vrai. En rubis||Lorsque vous utilisez plusieurs opérateurs dans une ligne dans une expression, il est conçu pour évaluer les termes dans l'ordre à partir de la gauche et terminer le processus lorsqu'il devient vrai pour la première fois. Cette méthode d'évaluation est appelée évaluation de court-circuit.

L'opérateur __ && __ a une conception similaire, sauf que le terme est évalué à partir de la gauche et que le processus se termine lorsqu'il devient false.

8.2.4 Modifications de la mise en page du test

.& __opérateur de navigation sûre(Ou"Opérateur Bocchi)__ 


 Vous pouvez utiliser l'opérateur Bocchi de Ruby pour écrire des modèles comme obj && obj.method sous une forme condensée comme obj & .method.
 Pour donner un exemple, le code d'opérateur logique suivant

```ruby

    if user && user.authenticate(params[:session][:password])

Il peut être simplifié comme suit.


    if user&.authenticate(params[:session][:password])

&& user.authentifier c'est&.Il peut être simplifié en authentifiant.


 N'est-ce pas trop simpliste pour un débutant Ruby? Je suis un peu confus,
 Il semble que l'opérateur Bocchi soit souvent utilisé, il semble donc que vous deviez faire un effort pour essayer de vous en souvenir vous-même.

#### 8.4.1 Résumé de ce chapitre
 - Vous pouvez utiliser la méthode Rails'``` session``` pour conserver l'état au moment de la transition de page. Vous pouvez également utiliser des cookies pour conserver l'état temporaire. (* Étant donné que tous les navigateurs interdiront le partage de cookies entre domaines à l'avenir, vous ne pourrez pas utiliser l'identifiant Rakuten ○, etc. acquis dans le domaine Rakuten ○ dans un autre domaine (domaine autre que Rakuten ○).)
 - Vous pouvez enregistrer temporairement l'ID utilisateur, etc. dans le navigateur en utilisant la méthode `` session ''.
 --Test Driven Development (TDD) est utile pour éviter les bogues de régression
 - L'avertissement d'intégration vous permet de tester si le routage, les mises à jour de la base de données et les changements de disposition sont effectués avec succès

## Chapitre 9 Évolution du mécanisme de connexion
#### 9.1.1 Jeton de stockage et cryptage
 Il existe quatre façons bien connues de voler des cookies.
 1. Extrayez les cookies directement des paquets réseau qui transitent par un réseau mal géré avec un logiciel spécial appelé Packet Sniffer.
 2. Extrayez le jeton de stockage de la base de données
 3. Utilisez les scripts intersites (XSS)
 4. Volez l'accès en utilisant directement le PC ou le smartphone sur lequel l'utilisateur est connecté

 La contre-mesure de 1. est de soutenir le site avec 7.5 SSL
 Correspondance de 2. Dans ce didacticiel, le jeton de stockage est stocké dans la base de données sous le nom __hashing __
 La correspondance de 3. est automatiquement traitée dans Rails
 4. Il est impossible pour le système de prendre des mesures de défense fondamentales

 ■ Utilisation de attr_accessor
 Lorsque vous souhaitez définir les attributs d'un objet pouvant être lu et écrit
 
 -Comment définir un objet utilisateur avec le nom et la description des attributs
 Pour les rails

```ruby

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :name
      t.string :description

      t.timestamps null: false
    end
  end
end

Pour du code Ruby pur qui ne gère pas DB


class User
  attr_accessor :name, :description
end

Au fait, attr_reader est utilisé lorsque vous voulez définir des attributs en lecture seule. attr_writerEst utilisé lorsque vous souhaitez définir des attributs en écriture seule.

Colonne 9.2.10 types de personnes

"Il y a 10 types de personnes dans ce monde. Quelqu'un qui comprend le binaire et d'autres qui ne comprennent pas le binaire" est une vieille blague dans l'industrie. C'est comme Roland (rires) Peut-être que Roland est resté coincé d'ici? ??

■ Opérateur Trinity Le code if else suivant

  if boolean?
    var = foo
  else
    var = bar
  end

Peut être raccourci comme suit

var = boolean? ? foo : bar

Nous utilisons souvent l'opérateur ternaire comme valeur de retour d'une méthode.

9.3.2 Test [Se souvenir de moi]

assert_equalEst ,Organisez les valeurs dans l'ordre <valeur réelle>.

assert_equal <expected>, <actual>

9.4.1 Résumé de ce chapitre

Chapitre 10 Mise à jour / Affichage / Suppression de l'utilisateur

10.1 Mettre à jour l'utilisateur

target="_blank"Utilisez pour créer un lien vers un nouvel onglet(Ou fenêtre)C'est un élément utile lors de la création de liens vers un autre site Web car il s'ouvrira dans. ★ Personnellement, je suis satisfait d'un autre onglet lorsque je passe à la destination du lien, donc lorsque je l'implémente, je veux vraiment l'implémenter! Personnellement, je pense que les sites pour PC (en supposant que les PC soient les principaux clients) devraient définitivement être introduits!

<a href="https://gravatar.com/emails" target="_blank">change</a>

Rails utilise `form_with (@user)` pour construire un formulaire, et quand`` @ user.new_record?``Is `true```, c'est `POST. , `` `` PATCH quand false``.

10.2.3 Transmission amicale

Dans __ * Tutorial, user est utilisé au lieu de @user, mais si vous l'utilisez, une erreur se produira dans users_login_test, utilisez donc @user. __

sessions_controller.rb


  def create
    @user = User.find_by(email: params[:session][:email].downcase)              #Réduisez la valeur d'e-mail reçue dans le hachage des paramètres, transmettez-la à l'attribut d'e-mail, recherchez l'utilisateur avec la même valeur d'e-mail dans le modèle Utilisateur et affectez-le à la variable utilisateur.
    if @user && @user.authenticate(params[:session][:password])                 #La variable utilisateur existe dans la base de données et la valeur de mot de passe reçue dans le hachage des paramètres est la même que la valeur de messagerie de l'utilisateur.(Si le mot de passe et l'adresse e-mail ont la même valeur)true
      log_in @user                                                              # sessions_journal d'aide_Exécutez la méthode in et utilisez l'utilisateur de la méthode de session_Envoyer l'identifiant à l'identifiant (stocké comme cookies temporaires dans le navigateur)
      params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)   #Se souvenir de la session lors de la connexion_l'attribut moi est 1(La case à cocher est activée)Si tel est le cas, détruisez la session définitivement, sinon détruisez la session persistante
      redirect_back_or @user                                                    #Rediriger vers la page précédente de l'utilisateur ou par défaut
    else
      flash.now[:danger] = 'Invalid email/password combination'                 #Afficher un message flash et le désactiver lorsqu'une nouvelle demande se produit
      render 'new'                                                              #Nouvelle sortie de vue
    end
  end
Error:
UsersLoginTest#test_login_with_remembering:
NoMethodError: undefined method `remember_token' for nil:NilClass
    test/integration/users_login_test.rb:60:in `block in <class:UsersLoginTest>'

10.5.1 Résumé de ce chapitre

Chapitre 11 Activation de compte

Flux d'activation utilisateur

  1. L'état initial de l'utilisateur est défini sur "non activé".
  2. Lors de l'enregistrement de l'utilisateur, un jeton d'activation et le résumé d'activation correspondant sont générés.
  3. Enregistrez le résumé d'activation dans la base de données et placez le jeton d'activation avec l'adresse e-mail dans le lien de l'e-mail d'activation envoyé à l'utilisateur.
  4. Lorsque l'utilisateur clique sur le lien dans l'e-mail, l'application utilise l'adresse e-mail comme clé pour trouver l'utilisateur et authentifie le jeton en le comparant avec le résumé d'activation stocké dans la base de données.
  5. Après avoir authentifié l'utilisateur, changez le statut de l'utilisateur de "non activé" à "activé".

11.3.3 Test d'activation et refactoring

assignsLes méthodes vous permettent d'accéder aux variables d'instance dans l'action correspondante. Par exemple, dans l'action create du contrôleur Users, il y a une variable d'instance `` `@ user, mais si vous écrivez ʻassigns (: user)` `` dans le test, elle sera dans la variable d'instance utilisateur. Vous pourrez y accéder.

J'ai eu une erreur lors du test. .. Reportez-vous à cet article sur Teratail et utilisez le code suivant

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      if user.activated?
        log_in user
        params[:session][:remember_me] == '1' ? remember(user) : forget(user)
        redirect_back_or user
      else
        message  = "Account not activated. "
        message += "Check your email for the activation link."
        flash[:warning] = message
        redirect_to root_url
      end
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

J'ai réussi en faisant ce qui suit ~

  def create
    @user = User.find_by(email: params[:session][:email].downcase)
    if @user && @user.authenticate(params[:session][:password])
      if @user.activated?
        log_in @user
        params[:session][:remember_me] == '1' ? remember(@user) : forget(@user)
        redirect_back_or @user
      else
        message  = "Account not activated. "
        message += "Check your email for the activation link."
        flash[:warning] = message
        redirect_to root_url
      end
    else
      flash.now[:danger] = 'Invalid email/password combination'
      render 'new'
    end
  end

11.5.1 Résumé de ce chapitre

Chapitre 12 Réinitialiser le mot de passe

12.3.3 Test de réinitialisation du mot de passe

-La méthode assigns est une méthode qui teste les variables d'instance du contrôleur. Passez la variable d'instance comme argument en tant que type de symbole. Cela vous donnera accès aux variables d'instance et vous permettra de les tester.

    @user = assigns(:user)

12.5.1 Résumé de ce chapitre

Chapitre 13 Micropost utilisateur

13.4.1 Téléchargement d'image de base

■Active Storage Les images peuvent être facilement manipulées en utilisant Active Storage, et le modèle associé aux images peut être librement spécifié. Active Storage est très polyvalent et peut gérer divers fichiers binaires tels que du texte brut, des fichiers PDF et des fichiers audio.

La première chose que vous devez savoir sur l'API Active Storage est la méthode has_one_attached. Ceci est utilisé pour associer le modèle spécifié au fichier téléchargé. has_one_attached peut être utilisé pour associer le modèle spécifié au fichier téléchargé. Dans le cas de has_one_attached, "1 image par Microsoft", Vous pouvez utiliser has_many_attached pour joindre «plusieurs images par Microsoft».

13.5.1 Résumé de ce chapitre

--Rails prend en charge plusieurs index clés

Chapitre 14 Suivre les utilisateurs

14.2.2 Statistiques et formulaire de suivi

@user ||= current_user

Le code ci-dessus ne fait rien si @ user n'est pas nul, et affecte current_user à` `` @ user s'il est nul.

14.4.3 Résumé de ce chapitre

--has_many: through vous permet de modéliser des relations de données complexes

Édition supplémentaire

__ ■ Liste des affirmations __

Méthode La description
assert_template(expected, message = nil) Assurez-vous que le modèle spécifié dans l'action est représenté
assert_not( test, [msg] ) __test__Mais__false__Vérifier si.
assert_select "div.nav" selector(div)Le contenu de l'élément qui correspond à l'égalité d'argument(nav)Vérifiez à

■ __ "!!" (lu comme "bang bang") __ Un opérateur qui peut convertir un objet en une valeur booléenne. nul sera faux.

>> !!nil
=> false

Tous les autres objets Ruby sont vrais, même zéro.

>> !!0
=> true

■! À propos du point de surprise (point d'exclamation) ◆ En utilisant la marque!, Vous pouvez modifier directement les données (attribut ~ ~). Lorsque vous n'utilisez pas ★!

  before_save { self.email = email.downcase }

Lors de l'utilisation de ★!

  before_save { email.downcase! }

Vous pouvez lever exception en ajoutant ◆! À une méthode! !! Exemple avec create, save. Sans! (Créer une sauvegarde) -Lorsque le processus est exécuté et que la création / sauvegarde de l'enregistrement échoue, `` nil '' est renvoyé. Lors de l'ajout! (Créer! Enregistrer!) Une exception (par exemple, ActiveRecord :: RecordNotFound ERROR) peut être levée.


■ HTML __type = "email" __ Avec __type = "email" __ en html, appuyez sur le formulaire de saisie depuis votre téléphone mobile pour afficher un clavier spécial optimisé pour votre adresse e-mail.

■ Mot-clé `private `

  private

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

PATCH Method for HTTP

■ << Opérateur (opérateur de pelle) <<Vous pouvez l'ajouter à la fin du tableau avec.

user.following << other_user

à la fin

Cela a pris un certain temps. .. Cela a pris environ un mois, bien que cela ait été accompagné d'erreurs Cloud9. .. Je pense que cela ne peut pas être aidé parce que c'était assez volumineux, mais il y a des gens qui le terminent plus tôt, donc je finirai de faire Portfolio plus tôt! !!

Merci pour la lecture! !!

Recommended Posts

Points à retenir et concepts dans le didacticiel Ruby on Rails
Comment déboguer le traitement dans le modèle Ruby on Rails avec juste la console
Cloud IDE: Heroku n'a pas pu être installé dans le didacticiel Ruby on Rails
[Ruby on Rails] Comment écrire enum en japonais
[Ruby on Rails] Modifiez la date de mise à jour et la date de création selon votre notation préférée
[Ruby on Rails] Comment se connecter avec seulement votre nom et mot de passe en utilisant le bijou
[Ruby On Rails] Comment réinitialiser DB dans Heroku
(Ruby on Rails6) Comment créer un modèle et une table
[Ruby on Rails] Afficher rapidement le titre de la page dans le navigateur
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Appliquer le CSS à une vue spécifique dans Ruby on Rails
Comment utiliser Ruby on Rails
Ruby on Rails compatible japonais-anglais i18n
Que faire si la page Rails n'est pas affichée dans le didacticiel Rails 1.3.2
(Ruby on Rails6) Créer une base de données et l'afficher dans une vue
Que faire lorsque Cloud 9 est plein dans le didacticiel Rails
J'ai résumé le flux jusqu'à l'implémentation de simple_calendar dans Ruby on Rails.
(Ruby on Rails6) Créer une fonction pour modifier le contenu publié
[Ruby on Rails] Passez les paramètres divisés par date_select à FormObject.
Ruby on Rails dans les espaces de codes Visual Studio
Comment utiliser MySQL dans le didacticiel Rails
Déployer sur Heroku [Ruby on Rails] Débutant
Préparation à l'introduction de jQuery dans Ruby on Rails
[Ruby on Rails] Comment utiliser redirect_to
Débutant a créé un portfolio avec Ruby on Rails
Bouton [Ruby on Rails] pour revenir en haut
Passer de SQLite3 à PostgreSQL dans un nouveau projet Ruby on Rails
Comment créer une requête à l'aide de variables dans GraphQL [Utilisation de Ruby on Rails]
Que faire lorsque l'hôte bloqué: "nom d'hôte" apparaît dans Ruby on Rails
Comment résoudre la construction de l'environnement local de Ruby on Rails (MAC)!
[Cloud9] Yay! You are on Rails! N'est pas affiché dans le didacticiel sur les rails
[Ruby On Rails] Mesures d'urgence lorsque redirect_to action :: show ne peut pas être (ne peut pas être utilisé) dans l'action de création et de destruction
[Ruby on Rails] Lors de la première connexion ・ Comment diviser l'écran en deux à l'aide de jQuery
Déployer sur Ruby on Rails Elastic beanstalk (déploiement EB)
[Ruby on Rails] Jusqu'à l'introduction de RSpec
J'ai essayé d'organiser la session en Rails
Recommandation de classe de service dans Ruby on Rails
Publiez l'application avec ruby on rails
Ruby on Rails ~ Principes de base de MVC et du routeur ~
Rails nouveau dans Ruby on Rails ~ Mémorandum jusqu'au déploiement 1
(Ruby on Rails6) Création de données dans une table
Déterminez la page actuelle avec Ruby on Rails
Comment créer la blockchain la plus simple de Ruby
Comment vérifier les commandes Rails dans le terminal
Je veux obtenir la valeur en Ruby
[Ruby on Rails] Comment faire de la destination du lien une partie de l'ID spécifié