[RUBY] (Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 4]

supposition

・ Le tutoriel Rails est la 4ème édition ・ Cette étude est le 3e tour (2e tour après le chapitre 9) ・ L'auteur est un débutant qui a fait tout Progate

Politique de base

・ Si vous le lisez, vous ne le comprendrez pas. ・ Recherchez et résumez les termes que vous ne comprenez pas (en bas de l'article, glossaire). ・ Plongez dans ce que vous ne comprenez pas. ・ Travaillez sur tous les exercices. ・ Ne copiez pas le code autant que possible.

Ceci est le chapitre 4. Je me souviens que ce chapitre était redondant. Je vais le faire sans rien dire. Cliquez ici pour la BGM d'aujourd'hui. matryoshka "zatracenie[full album]"

[4.1.2 Mémo d'assistance personnalisé]

・ Méthode nouvellement créée = aide personnalisée ・ ** Helper utilisé sur toutes les pages: installé dans app / helpers / application_helper.rb ** ・ ** Helper utilisé uniquement par un contrôleur spécifique: installé dans app / helpers / (nom du contrôleur correspondant) .rb **

[4.2.2 Mémo de chaîne de caractères et pratique]

-La méthode put renvoie nil comme valeur de retour. Le caractère de saut de ligne \ n est ajouté à la fin de la sortie. -La méthode d'impression n'ajoute pas de caractère de saut de ligne. -Les expressions ne peuvent pas être développées entre guillemets simples. Utile lorsque vous souhaitez conserver les caractères saisis tels quels sans les échapper

  1. Remplacez une ville / quartier / ville / village approprié dans la variable ville et une préfecture appropriée dans la variable préfecture. → city = "sapporo" prefecture = "hokkaido" (parce que je regarde le match à Consadore Sapporo maintenant)

  2. Créons une chaîne de caractères pour une adresse telle que "Shinjuku-ku, Tokyo" en utilisant les variables et le développement de formule créés précédemment. Utilisez des mises pour la sortie. → Ci-dessous

>> puts prefecture +  " " + city          
hokkaido sapporo
=> nil
  1. Essayez de remplacer l'espace demi-largeur entre les chaînes de caractères ci-dessus par une tabulation. (Indice: identique au caractère de saut de ligne, la tabulation est également un caractère spécial) → Ci-dessous
>> puts prefecture +  "\t" + city         
hokkaido        sapporo
=> nil
  1. Que se passe-t-il si vous remplacez la chaîne de caractères par une tabulation des guillemets doubles aux guillemets simples? → Ci-dessous
>> puts prefecture +  '\t' + city         
hokkaido\tsapporo
=> nil

[4.2.3 Exercice pour passer des objets et des messages]

  1. Quelle est la longueur de la chaîne "racecar" Utilisez la méthode length pour le découvrir. → Ci-dessous
>> s = "racecar"
=> "racecar"
>> s.length
=> 7
  1. Utilisez la méthode inverse pour savoir ce qui se passe lorsque vous lisez la chaîne "racecar" à l'envers. → Ci-dessous
>> s.reverse
=> "racecar"
  1. Remplacez «voiture de course» par la variable s. Utilisez ensuite l'opérateur de comparaison (==) pour voir si les valeurs des variables s et s.reverse sont identiques. → Je l'ai déjà mis. Suivant
>> s == s.reverse
=> true
  1. Quel est le résultat de l'exécution du Listing 4.9? Que se passe-t-il si vous attribuez la chaîne "onomatopée" à la variable s? Conseil: Commande précédemment utilisée en utilisant la flèche vers le haut (ou la commande Ctrl-P) La réutilisation est pratique car vous n'avez pas à taper toutes les commandes à partir de zéro. ) → Ci-dessous
>> puts "It's a palindrome!" if s == s.reverse
It's a palindrome!
=> nil
>> s = "onomatopoeia"
=> "onomatopoeia"
>> puts "It's a palindrome!" if s == s.reverse
=> nil

[4.2.4 Exercice de définition de méthode]

  1. Remplacez la partie FILL_IN du Listing 4.10 par le code approprié et définissez une méthode pour vérifier s'il s'agit d'une circulaire. Astuce: voir la méthode de comparaison dans l'extrait 4.9. → Ci-dessous
>> def palindrome_tester(s)
>>   if s == s.reverse
>>     puts "It's a palindrome!"
>>   else
>>     puts "It's not a palindrome."
>>   end
>> end
=> :palindrome_tester
  1. Utilisez la méthode définie ci-dessus pour voir si «voiture de course» et «onomatopée» sont des circulaires. Si le résultat est que la première est une circulaire et la seconde n'est pas une circulaire, c'est une réussite. → Ci-dessous
>> palindrome_tester("racecar")
It's a palindrome!
=> nil
>> palindrome_tester("onomatopoeia")
It's not a palindrome.
=> nil
  1. Appelez la méthode nil? Sur palindrome_tester ("racecar") et vérifiez si la valeur de retour est nil (c'est-à-dire assurez-vous que le résultat de l'appel de nil? Est vrai). .. Cette chaîne de méthodes signifie que la méthode nil? Reçoit la valeur de retour du Listing 4.10 et renvoie le résultat. → Ci-dessous
>> palindrome_tester("racecar").nil?
It's a palindrome!
=> true

[4.3.1 Exercice des opérateurs de réseau et de plage]

  1. Divisez la chaîne de caractères "Un homme, un plan, un canal, Panama" par "," pour créer un tableau, et affectez-le à la variable a. → Ci-dessous
>> a = "A man, a plan, a canal, Panama".split(',')
=> ["A man", " a plan", " a canal", " Panama"]

2. Ensuite, essayez de remplacer le résultat (chaîne de caractères) de la concaténation des éléments de la variable a dans la variable s. → Ci-dessous

>> s = a.join
=> "A man a plan a canal Panama"
  1. Divisez la variable s par un espace demi-largeur, puis concaténez-la à nouveau pour créer une chaîne de caractères (indice: vous pouvez le faire sur une seule ligne à l'aide de la chaîne de méthodes). Utilisez la méthode de vérification utilisée dans l'extrait 4.10 pour vous assurer que la variable s n'est pas une circulaire (actuellement encore). Utilisez la méthode downcase pour vous assurer que le downcase est une circulaire. → Ce sera comme ça une fois assemblé (c'était gênant de redéfinir la méthode car j'ai laissé tomber la console une fois!)
>> palindrome_tester(s.split(' ').join.downcase)
It's a palindrome!
=> nil
  1. Créez un objet de plage de a à z et essayez d'extraire le 7ème élément. De la même manière, essayez d'extraire le 7ème élément de l'arrière. (Astuce: n'oubliez pas de convertir l'objet range en tableau) → C'est 6 car il commence à 0 au début
>> A = ("a".."z").to_a
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]
>> A[6]
=> "g"
>> A[-7]
=> "t"

[4.3.2 Exercice en bloc]

  1. Utilisez l'objet range 0.16 pour afficher le carré de chaque élément. → Ci-dessous
>> (0..16).each { |i| puts i**2 }
0
1
4
9
16
25
36
49
64
81
100
121
144
169
196
225
256
=> 0..16

2. Définissez une méthode appelée hurler (crier fort). Cette méthode prend un tableau d'éléments de chaîne, concatène chaque élément, puis le met en majuscule et renvoie le résultat. Par exemple, lorsque vous exécutez yeller (['o', 'l', 'd']), il réussit si le résultat "OLD" est renvoyé. Conseil: essayez d'utiliser les méthodes map, upcase et join. → Ci-dessous. Je me demande si c'est une manière plus intelligente. Vous pouvez simplement mettre une chaîne de caractères dans l'argument au lieu d'un tableau.

>> def yeller(s)
>>   s.map(&:upcase).join
>> end
=> :yeller
>> yeller(['o','l','d'])
=> "OLD"
  1. Définissez une méthode appelée random_subdomain. Cette méthode génère 8 caractères aléatoires et les renvoie sous forme de chaîne. Conseil: il s'agit d'une version méthodique du code Ruby utilisé pour créer le sous-domaine. → Ci-dessous
>> def random_subdomain
>>   ("a".."z").to_a.shuffle[0..7].join
>> end
=> :random_subdomain
>> random_subdomain
=> "unwdemsp"
  1. Remplacez la partie "?" Du Listing 4.12 par la méthode appropriée. Conseil: vous pouvez combiner les méthodes de fractionnement, de lecture aléatoire et de jointure pour mélanger la chaîne (argument) transmise à la méthode. → Ci-dessous
>> def string_shuffle(s)
>>   s.split('').shuffle.join
>> end
=> :string_shuffle
>> string_shuffle("foobar")
=> "arbfoo"

[4.3.3 Exercice de hachage et de symbole]

  1. Créez un hachage avec les clés "un", "deux" et "trois" et les valeurs respectives "uno", "dos" et "trés". Ensuite, regardez chaque élément du hachage et affichez chaque clé et valeur sous la forme "'# {key}' en espagnol est '# {value}'". → Ci-dessous
>> n = { one: 'uno', two: 'dos', three: 'tres' }
=> {:one=>"uno", :two=>"dos", :three=>"tres"}
>> n.each do |key, value|                 
?>   puts "#{key}L'espagnol est#{value}"
>> end
L'espagnol pour un est uno
deux espagnol est dos
trois espagnol est tres
=> {:one=>"uno", :two=>"dos", :three=>"tres"}

2. Créez trois hachages, person1, person2 et person3, ajoutez les clés: first et: last à chaque hachage et entrez une valeur appropriée (nom, etc.). Ensuite, essayez de créer un hachage des paramètres de hachage comme ceci: 1.) Attribuez à person1 la valeur des paramètres clés [: père], 2). Attribuez à person2 la valeur des paramètres clés [: mère], 3). Attribuez à person3 la valeur des paramètres clés [: enfant]. Enfin, vérifiez le hachage du hachage pour voir s'il s'agit de la valeur correcte. (Par exemple, assurez-vous que les paramètres [: père] [: premier] correspondent à personne1 [: premier]) → Ci-dessous. Vous êtes un partisan de Gamba qui comprend la signification de chaque nom et clé. (De la formation de départ de la section 14 de la saison 2020)

>> person1 = { first: "Yuki", last: "Yamamoto" }                                    
=> {:first=>"Yuki", :last=>"Yamamoto"}
>> person2 = { first: "Yosuke", last: "Ideguchi" }
=> {:first=>"Yosuke", :last=>"Ideguchi"}
>> person3 = { first: "Shu", last: "Kurata" }
=> {:first=>"Shu", :last=>"Kurata"}
>> params = { anchor: person1, rih: person2, lih: person3 }
=> {:anchor=>{:first=>"Yuki", :last=>"Yamamoto"}, :rih=>{:first=>"Yosuke", :last=>"Ideguchi"}, :lih=>{:first=>"Shu", :last=>"Kurata"}}
>> params[:anchor][:first] == person1[:first]
=> true

3. Essayez de définir un utilisateur appelé par hachage. Ce hachage a trois clés: nom ,: email et: password_digest, dont chaque valeur est attribuée à votre nom, votre adresse e-mail et une chaîne aléatoire de 16 caractères. → Ci-dessous

>> user = { name: "tk", email: "[email protected]", password_digest: ("a".."z").to_a.shuffle[0..15].join }
=> {:name=>"tk", :email=>"[email protected]", :password_digest=>"socxlgerjatyinbw"}

4. Utilisez l'API Ruby (ou Rurima Search) pour découvrir la méthode de fusion de la classe Hash. Pouvez-vous deviner quel sera le résultat sans exécuter le code suivant? Si vous pouvez le deviner, essayez d'exécuter le code pour voir si vous deviniez.

{ "a" => 100, "b" => 200 }.merge({ "b" => 300 })

→ Honnêtement, même si vous recherchez par Rurima Search Je ne comprends pas vraiment. Le japonais n'est pas japonais. Donc, si vous comptez normalement sur Google Sensei, la méthode de fusion est une méthode qui combine plusieurs hachages. Ensuite, le hachage de fusion "avant" est combiné avec le hachage de fusion "après", mais s'il existe un hachage en double, le hachage "après" est écrasé. Le résultat ci-dessus doit donc être b égal à 300. Les résultats réels sont ci-dessous. Ça rentre.

>> { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
=> {"a"=>100, "b"=>300}

[4.4.1 Exercice du constructeur]

  1. Quel est le constructeur littéral qui crée une plage d'objets de 1 à 10? (Révision) → Ci-dessous
>> r = 1..10
=> 1..10

2. Utilisez maintenant la classe Range et la nouvelle méthode pour créer un objet range de 1 à 10. Conseil: vous devez transmettre deux arguments à la nouvelle méthode. → Ci-dessous

>> r2 = Range.new(1,10)
=> 1..10

3. Utilisez l'opérateur de comparaison == pour vérifier que les objets créés dans les deux tâches ci-dessus sont identiques. → Ci-dessous

>> r == r2
=> true

[4.4.2 Exercice d'héritage de classe]

  1. Vérifiez la hiérarchie d'héritage de la classe Range. De même, regardez la hiérarchie d'héritage des classes Hash et Symbol. → Premier de Range.
>> r = Range.new(1,3)
=> 1..3
>> r.class
=> Range
>> r.class.superclass
=> Object
>> r.class.superclass.superclass
=> BasicObject
>> r.class.superclass.superclass.superclass
=> nil

Puis Hash

>> h = {}
=> {}
>> h.class
=> Hash
>> h.class.superclass
=> Object
>> h.class.superclass.superclass
=> BasicObject
>> h.class.superclass.superclass.superclass
=> nil

Enfin symbole

>> s = :symbol
=> :symbol
>> s.class
=> Symbol
>> s.class.superclass
=> Object
>> s.class.superclass.superclass
=> BasicObject
>> s.class.superclass.superclass.superclass
=> nil

2. Omettez self.reverse self dans l'extrait 4.15 et écrivez reverse pour voir si cela fonctionne. → Ci-dessous

>> class Word < String
>>   def palindrome?
>>     self == reverse
>>   end
>> end
=> :palindrome?
>> s = Word.new("level")
=> "level"
>> s.palindrome?
=> true

[4.4.3 Exercice pour changer de classe intégrée]

  1. Utilisez la méthode palindrome? Pour vérifier que «voiture de course» est une circulaire et que «onomatopée» ne l'est pas. Le mot «malayalam» du sud de l'Inde est-il une récitation? Astuce: N'oubliez pas de l'abaisser avec la méthode downcase. → Suivons le déroulement de l'exercice en 4.4.2.
s = Word.new("racecar")
=> "racecar"
>> s.palindrome?
=> true
>> s = Word.new("onomatopoeia")
=> "onomatopoeia"
>> s.palindrome?
=> false
>> s.downcase.palindrome?
=> true

2. Reportez-vous au Listing 4.16 et essayez d'ajouter la méthode shuffle à la classe String. Astuce: le Listing 4.12 est également utile.

  1. Utilisez l'opérateur de comparaison == pour vérifier que les objets créés dans les deux tâches ci-dessus sont identiques. → Collectivement ci-dessous
>>   def shuffle
>>     self.split('').shuffle.join
>>   end
>> end
=> :shuffle
>> "foobar".shuffle
=> "fobaro"
>> class String
>>   def shuffle
>>     split('').shuffle.join
>>   end
>> end
=> :shuffle
>> "foobar".shuffle
=> "boroaf"

[4.4.4 Exercice de classe de contrôleur]

  1. Ouvrez la console Rails dans le répertoire de l'application Toy créé au chapitre 2 et exécutez User.new pour vérifier que l'objet utilisateur peut être créé. → J'efface toy_app ... Alors, exécutez git clone. Je suis redevenu plus intelligent. On m'a demandé un nom d'utilisateur et un mot de passe, mais j'ai pu le faire en entrant mon nom de compte Github et mon mot de passe de connexion.
$git clone https du référentiel distant correspondant

Et quand j'ai essayé d'entrer dans le sujet principal, j'ai eu diverses erreurs ... budle install - sans production ni rails db: migrer pour résoudre. Vous avez créé avec succès un objet utilisateur.

>> user = User.new
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>

2. Vérifiez la hiérarchie d'héritage de la classe d'objets utilisateur générée. → Ci-dessous

>> user.class
=> User(id: integer, name: string, email: string, created_at: datetime, updated_at: datetime)
>> user.class.superclass
=> ApplicationRecord(abstract)
>> user.class.superclass.superclass
=> ActiveRecord::Base
>> user.class.superclass.superclass.superclass
=> Object
>> user.class.superclass.superclass.superclass.superclass
=> BasicObject
>> user.class.superclass.superclass.superclass.superclass.superclass
=> nil

[4.4.5 Exercice de classe d'utilisateurs]

  1. Modifiez l'attribut name défini dans la classe User et divisez-le en attribut first_name et last_name. Essayez également de définir une méthode full_name qui utilise ces attributs pour renvoyer une chaîne telle que "Michael Hartl". Enfin, remplaçons la partie nom de la méthode formatted_email par full_name (réussi si c'est le même que le résultat d'origine) → Ci-dessous

example_user.rb


class User
  attr_accessor :first_name, :last_name, :email
  
  def initialize(attributes = {})
    @first_name = attributes[:first_name]
    @last_name = attributes[:last_name]
    @email = attributes[:email]
  end
  
  def full_name
    "#{@first_name} #{@last_name}"
  end
  
  def formatted_email
    "#{self.full_name} <#{@email}>"
  end
end

Sur la console

>> require './example_user'
=> true
user = User.new(first_name: "t" ,last_name: "k", email: "[email protected]")
=> #<User:0x00000000030715e0 @first_name="t", @last_name="k", @email="[email protected]">
>> user.formatted_email=> "t k <[email protected]>"

2. Définissons une méthode de nom alphabétique qui renvoie dans un format tel que "Hartl, Michael" (une chaîne de caractères dans laquelle le nom et le prénom sont séparés par une virgule + un espace demi-largeur). → Ci-dessous

  def full_name
    "#{@first_name} #{@last_name}"
  end
  1. Comparez les résultats de full_name.split et alphabetical_name.split (','). Inversez et voyez s'ils donnent le même résultat. → Puisque j'ai rempli l'exercice 2 ci-dessus, rechargez-le sur la console. La valeur d'entrée ci-dessus est également trop courte, alors entrez-la à nouveau. (Yat's a est manquant ...)
>> require './example_user'=> true
>> user = User.new(first_name: "Ysuhito", last_name: "Endo", email: "[email protected]")
=> #<User:0x0000000003059968 @first_name="Ysuhito", @last_name="Endo", @email="[email protected]">
>> user.full_name.split=> ["Ysuhito", "Endo"]
>> user.alphabetical_name.split(', ').reverse
=> ["Ysuhito", "Endo"]
>> user.full_name.split == user.alphabetical_name.split(', ').reverse
=> true

Résumé du chapitre 4

-Utiliser correctement le fichier de définition d'assistance selon qu'il est utilisé dans son ensemble ou dans un contrôleur spécifique. ・ Imprimez l'orientation de l'objet dans vos sens. Tout est un objet. -Les classes peuvent être héritées. Il y a toujours une classe originale. Puisqu'il est hérité, diverses fonctions peuvent être utilisées. -La méthode de classe est définie dans la classe et la méthode d'instance est définie dans l'instance. ・ () Ou {} peut être omis. Par exemple, {} dans le dernier bloc de l'argument. -: Le nom est un symbole. La notation de hachage est généralement écrite comme ~~: "mojiretu". ・ Puisqu'il y avait des mots que je ne comprenais pas, je les ai résumés dans le glossaire.

Ce chapitre a été beaucoup de travail. Mais la connaissance des abréviations peut être importante pour la lecture de code. À partir du prochain chapitre 5, nous reviendrons sur le développement d'applications!

Allez au chapitre 5! Cliquez ici pour le chapitre 3 Cliquez ici pour les conditions préalables et le statut de l'auteur pour l'apprentissage

Glossaire qui saisit en quelque sorte l'image

・ Fonctions intégrées Une fonction qui est préparée à l'avance pour des spécifications telles que les langages de programmation et peut être utilisée en standard. En revanche, une fonction définie et implémentée par un programmeur en code est appelée "fonction définie par l'utilisateur".

・ API (interface de programmation d'application) Une convention qui définit la procédure et le format de données pour appeler et utiliser les fonctions d'un certain programme informatique (logiciel) et les données à gérer à partir d'un autre programme externe. L'utilisation de l'API présente les avantages de rationaliser le développement logiciel, d'améliorer la sécurité et d'obtenir facilement les dernières informations.

・ Escape (caractère d'échappement / traitement) Un caractère qui a une fonction (telle que ), telle que la transformation d'une chaîne de caractères significative en une simple chaîne de caractères ou vice versa.

・ Littéral Les lettres et les chiffres écrits dans le code source.

・ Nid Un état ou une structure dans lequel quelque chose de la même forme et du même type (une taille plus petite) est contenu dans quelque chose.

・ Accessir Une méthode fournie pour l'accès externe aux variables membres (attributs, propriétés) à l'intérieur d'un objet dans la programmation orientée objet. Il est prêt à masquer les variables membres à l'intérieur de l'objet et à les empêcher d'être directement référencées de l'extérieur.

・ Variables membres Une variable d'instance.

Recommended Posts

(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un tutoriel Rails [Chapitre 11]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 14]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 12]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 5]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 3]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 4]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 8]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 6]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 13]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 9]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 10]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 7]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Chapitre 2]
(Giri) Un employé du gouvernement local dans la vingtaine travaille sur un didacticiel Rails [Introduction]
[Tutoriel Rails Chapitre 5] Créer une mise en page
(Ruby on Rails6) Création de données dans une table
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 2] Que faire lorsque vous faites une erreur dans le nom de la colonne
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
Difficultés à créer un environnement Ruby on Rails (Windows 10) (SQLite3)
Comment afficher des graphiques dans Ruby on Rails (LazyHighChart)
Appliquer le CSS à une vue spécifique dans Ruby on Rails