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

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 6e édition

Que faire dans ce chapitre

Découvrez la grammaire et la structure de Ruby pour l'avenir.

Motivation

Alors que j'ai trouvé la commodité de pouvoir écrire du code dans une certaine mesure en utilisant Rails sans en savoir beaucoup sur Ruby Si vous ne connaissez pas Ruby, le développement sera inefficace et votre code sera limité. Vous découvrirez également Ruby lui-même ici.

Créez et travaillez sur des branches thématiques comme d'habitude.

$ git checkout -b rails-flavored-ruby
Switched to a new branch 'rails-flavored-ruby'

Aide intégrée

Il a été écrit dans application.html.erb créé dans le chapitre précédent

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

Nous étudierons également la grammaire utilisée ici. Le stylesheet_link_tag est l'assistant intégré de Rails.

Aide personnalisée

Dans Rails, en plus des fonctions intégrées, vous pouvez utiliser vos propres fonctions définies. Cette fois, le titre par défaut est renvoyé lorsqu'aucune valeur n'est donnée au titre du site dans la méthode provide. Créons une fonction.

Parce que c'est une aide que je souhaite utiliser dans le fichier de mise en page application.html.erb Définir dans l'assistant d'application

application_helper.rb


module ApplicationHelper
  def full_title(page_title = '')
    base_title = "Ruby on Rails Tutorial Sample App"
    if page_title.empty?
      base_title
    else
      page_title + " | " + base_title
    end
  end
end

Chaînes et méthodes

Nous allons procéder à l'apprentissage en utilisant la console Rails.

Dans mon cas, j'ai eu une erreur et je n'ai pas pu démarrer au début Des exemples et des contre-mesures sont énumérés à titre de référence.

Erreur apparue au démarrage

FATAL: Listen error: unable to monitor directories for changes.
Visit https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers for info on how to fix this

Site de référence https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers

Que faire lorsque la console des rails ne peut pas être démarrée (édition d'erreur "FATAL: Listen error")

Si le démarrage réussit Une telle console se lance.

Running via Spring preloader in process 6472
Loading development environment (Rails 6.0.3)
>> 

Tout comme le terminal, vous pouvez utiliser la touche fléchée haut pour obtenir la commande que vous avez frappée auparavant, il n'y a donc aucune raison de ne pas l'utiliser.

Chaîne

Reprenons ce que j'estime personnellement important.

・ Les chaînes de caractères peuvent être créées en les mettant entre "" (guillemets doubles).

-Les variations peuvent être développées dans une chaîne de caractères en les mettant entre # {}.

・ Les chaînes de caractères peuvent également être créées en les entourant de '' (guillemets simples).

-L'expansion de l'expression n'est pas possible avec une chaîne de caractères entre guillemets simples.

・ Les guillemets simples sont pratiques lorsque vous souhaitez afficher des caractères spéciaux tels que # tels quels.

Exercice

1.

>> city = "Quartier Shinjuku"
=> "Quartier Shinjuku"
>> prefecture = "Tokyo"
=> "Tokyo"
>> puts prefecture + " " + city
Shinjuku-ku, Tokyo
=> nil
>> puts prefecture + "\t" + city                                                                     
Shinjuku-ku, Tokyo
=> nil
>> puts prefecture + '\t' + city                                                                      
Tokyo\t Quartier Shinjuku
=> nil

Passer des objets et des messages

Ici aussi, je résumerai les parties importantes.

・ Ruby est un objet └ Les chaînes de caractères, uniquement des nombres, nulles sont également traitées comme des objets

・ Il est courant que les méthodes Ruby retournent des valeurs logiques si elles sont suffixées avec?

・ Ruby est els si, pas autre si! ← Soyez prudent car vous faites souvent des erreurs et lancez des erreurs inutiles ()

-Dans Ruby, les instructions if et sauf suivantes peuvent être utilisées. → Le code est facile à lire, concis et très pratique

-Tout objet tel qu'une chaîne de caractères ou nil peut être refusé deux fois en ajoutant deux! Au début, c'est-à-dire qu'il peut être converti en une valeur logique.

>> !"Si vous le niez une fois, il sera annulé"
=> false
>> !!"Vous pouvez rendre le résultat logique en le refusant deux fois"
=> true

Le moyen le plus simple de le comprendre est d'afficher la classe de l'objet avec la méthode de classe. Vous pouvez trouver la classe d'un objet en le définissant sur .class.

>> nil.class
=> NilClass
>> "".class
=> String
>> 12.class
=> Integer

Ayez toujours un cours comme celui-ci

Exercice
>> "racecar".length
=> 7
>> "racecar".reverse
=> "racecar"
>> s= "racecar"
=> "racecar"
>> s == s.reverse
=> true
>> 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

Définition de la méthode

C'est très simple à faire ici aussi. Résumez uniquement les points principaux.

-Les méthodes peuvent contenir des valeurs par défaut. (Les arguments peuvent être omis s'il existe une valeur par défaut)

-Ruby peut être décrit en omettant les parenthèses () de l'argument de la méthode. ← Si vous ne comprenez pas cela, le code des chapitres suivants ne sera pas clair ...

-Ruby a une valeur de retour implicite dans la méthode. (Renvoie implicitement la dernière expression de la méthode sans retour.)

>> def show_message
>> "Nice to meet you!"
>> end
=> :show_message
>> show_message
=> "Nice to meet you!"

Cela peut être un peu déroutant, mais lorsque j'exécute la méthode show_message, elle renvoie "Ravi de vous rencontrer!" On peut voir que le contenu d'évaluation de la dernière expression de la méthode est retourné comme une valeur de retour implicite même si la valeur de retour n'est pas spécifiée dans l'instruction de retour.

Exercice
>> def palindrome_tester(s)
>> if s == s.reverse
>> puts "It's a palindrome!"
>> else 
>> puts "It's not a palindrome!"
>> end
>> end
=> :palindrome_tester
>> palindrome_tester("racecar")
It's a palindrome!
=> nil
>> palindrome_tester("onomatopoeia")
It's not a palindrome!
=> nil
>> palindrome_tester("racecar").nil?
It's a palindrome!
=> true

assistant de titre à nouveau

La méthode full_title est écrite dans Application Helper. module Application Helper est une fonction permettant de regrouper des méthodes. Ceux qui peuvent utiliser ce module en utilisant le nom du module include

L'une des fonctions utiles de Rails est que le module d'assistance est chargé sans autorisation, vous n'avez donc pas à vous soucier de l'inclure. Peut être utilisé.

ApplicationHelper peut également être utilisé dans n'importe quelle vue pour le module d'assistance commun de toutes les vues. Super pratique.

Autres structures de données

Opérateur de baie et de plage

Voici également un résumé des points.

・ Diverses méthodes telles que le tri, l'inversion et la lecture aléatoire peuvent être utilisées pour les tableaux. Ces méthodes renvoient simplement une valeur, le contenu du tableau ne change pas Pour réécrire le contenu tel quel, ajoutez! A la fin de la méthode et utilisez "méthode destructive".

-Les éléments peuvent être ajoutés à la fin d'un tableau en utilisant push ou <<.

・ Si 0..4 est spécifié, 0,1,2,3,4 est renvoyé. (Objet Range)

・ Bien que ce soit un peu compliqué, en spécifiant un objet range et -1 comme indice du tableau

>> a[2..-1]
=> [2, 3, 4, 5, 6, 7, 8, 9]

Ce type d'opération peut être réalisé L'objet range à ce moment est spécifié de 2 à la fin du tableau.

Exercice
>> a = "A man,a plan,a canal,Panama".split(",")
=> ["A man", "a plan", "a canal", "Panama"]
>> s = a.join
=> "A mana plana canalPanama"
>> palindrome_tester(s.split.join.downcase)
It's a palindrome!
=> nil
>> array =("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"]
>> array[7]
=> "h"
>> array[-7]
=> "t"

bloquer

Le blocage est très pratique mais difficile avec les fonctions Ruby

(1..5).each { |i| puts 2 * i }Quand j'essaye de le lire doucement en japonais


 Faites 2 x ce nombre pour chaque nombre de 1 à 5. … C'est difficile à comprendre ()
 Vous sortez les objets range 1..5 un par un, mettez-les dans la variable i et mettez le résultat de 2 * i.
 Difficile à expliquer ...

 Si vous implémentez cela sans utiliser de blocs

puts 2 * 1 2 => nil

puts 2 * 2 4 => nil

puts 2 * 3 6 => nil

puts 2 * 4 8 => nil

puts 2 * 5 10 => nil


 Vous pouvez réduire la quantité de code en utilisant des blocs + vous pouvez l'appliquer. En d'autres termes, c'est super pratique et important. c'est tout…

 fois → Répéter le traitement dans le bloc le nombre de fois spécifié.

 each → Appliquez le traitement dans le bloc à chaque élément tel qu'un tableau ou un objet range.

 map → Appliquer le traitement dans le bloc à chaque élément tel qu'un tableau ou un objet range, et renvoyer le résultat.

 Si vous comprenez cela et utilisez des blocs, vous pouvez comprendre les blocs du didacticiel dans une certaine mesure.

 La description du code de test du minitest utilisé dans le tutoriel est également un bloc.

test "it is a test" do

end

 Dans cette description, la partie entourée par do end est un bloc.

##### Exercice
1.

(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. Ceci est un détour si vous utilisez la carte comme indiqué dans l'énoncé du problème

 Comment ne pas utiliser la carte

def yeller(strings) strings.join.upcase end => :yeller

yeller(['o','l','d']) => "OLD"


 comment utiliser la carte

def yeller(strings) s = strings.map { |string| string.upcase} s.join end => :yeller

yeller(['o','l','d']) => "OLD"


3.

def random_subdomain ("a".."z").to_a.shuffle[0..7].join end => :random_subdomain

random_subdomain => "gimfnslj"


4.

def string_shuffle(s) s.split('').shuffle.join end => :string_shuffle

string_shuffle("foobar") => "bforao"


#### Hash et symbole
 Je vais omettre l'explication ici, mais attention à une seule

 Abréviation de hachage

#### **`params = { name: "Michael", email: "[email protected]"}`**

N'oubliez pas que cela n'utilise que les symboles : name '' et ``: email '' comme clés. Parce que je ne l'ai pas bien compris Dans un chapitre ultérieur params [: user] [: email] Pourquoi est-ce un symbole quand il est écrit? Ne laissez pas cela arriver ...

Exercice
>> numbers = { "one" => "uno", "two" => "dos", "three" => "tres"}
=> {"one"=>"uno", "two"=>"dos", "three"=>"tres"}
>> numbers.each { |key,value| puts "'#{key}'L'espagnol est'#{value}'"}
'one'L'espagnol est'uno'
'two'L'espagnol est'dos'
'three'L'espagnol est'tres'
=> {"one"=>"uno", "two"=>"dos", "three"=>"tres"}
>> person1 = { first: "Shinzo", last:"Abe" }
=> {:first=>"Shinzo", :last=>"Abe"}
>> person2 = { first: "yoshihide", last:"suga" }                                                      
=> {:first=>"yoshihide", :last=>"suga"}
>> person3 = { first: "Taro", last:"Aso" }                                                            
=> {:first=>"Taro", :last=>"Aso"}
>> params = { father: person1, mother: person2, child: person3}
=> {:father=>{:first=>"Shinzo", :last=>"Abe"}, :mother=>{:first=>"yoshihide", :last=>"suga"}, :child=>{:first=>"Taro", :last=>"Aso"}}
>> params[:father][:first]
=> "Shinzo"
>> user = { name:"take", email:"[email protected]", password_digest: ("a".."z").to_a.shuffle[0..15].join}
=> {:name=>"take", :email=>"[email protected]", :password_digest=>"mkadrptqhysfnoec"}
  1. Écraser si la clé existe, ajouter une nouvelle méthode Hash si elle n'existe pas La valeur de "b" est écrasée car la clé "b" existe En d'autres termes
>> { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
=> {"a"=>100, "b"=>300}

CSS à nouveau

Ici, je vais essayer de déchiffrer la ligne vide de sens écrite dans le fichier de mise en page

stylesheet_link_tag 'application', media: 'all',
                                   'data-turbolinks-track': 'reload'

Cette ligne est -Les parenthèses lors de l'appel d'une méthode peuvent être omises. -Le {} du hachage du dernier argument lors de l'appel d'une méthode peut être omis. Il est simplifié en utilisant la règle. Si vous écrivez sans simplification

stylesheet_link_tag ('application', {media: 'all',
                                   'data-turbolinks-track': 'reload'})

Sera.

Cours en Ruby

constructeur

Habituellement, une instance d'une classe est créée à l'aide de new. Exemple user = User.new Cela s'appelle un constructeur nommé et appelle une nouvelle méthode sur le nom de la classe. Mais certaines classes peuvent être instanciées différemment Exemple "Bonjour" a = [1,2,3]

0..5


 Ceux-ci sont appelés constructeurs littéraux
 Ce sont respectivement des instances des classes String, Array et Range.

##### Exercice
 1 ... opérateur → 0..10 etc.

2.

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

3.

(0..10) == Range.new(0,10)
=> true


#### Héritage de classe
 Omis car il est décrit en détail dans le tutoriel

##### Exercice
 1. Tous héritent de la classe Object.

Hash.superclass => Object

Range.superclass => Object

Symbol.superclass => Object


2.

class Word < String def palindrome? self == reverse end end => :palindrome?

s = Word.new("Shinbunshi") => "Shinbunshi"

s.palindrome? => true


#### Changer de classe intégrée
 Classes intégrées qui existent dans Ruby
 Peut être étendu. Vous ne devriez pas étendre les classes intégrées à moins que vous n'ayez juste une bonne raison
 Rails ajoute des méthodes de commodité couramment utilisées à ses classes intégrées.

##### Exercice
 Essayez 1,2,3 en même temps.

```irb
>> class String
>> def palindrome?
>> downcase == downcase.reverse
>> end
>> def shuffle
>> split('').shuffle.join
>> end
>> end
=> :shuffle
>> "racecar".palindrome?
=> true
>> "racecar".shuffle
=> "reaarcc"

Classe de contrôleur

image.png From Rails Tutorial 6e édition https://railstutorial.jp/chapters/rails_flavored_ruby?version=6.0#fig-static_pages_controller_inheritance

La structure d'héritage du contrôleur StaticPages créée au chapitre 3 ressemble à ceci

Exercice
takemo-admin:~/environment/toy_app (master) $ cd ../sample_app/
takemo-admin:~/environment/sample_app (rails-flavored-ruby) $ cd ../toy_app/
takemo-admin:~/environment/toy_app (master) $ rails c
Running via Spring preloader in process 13820
Loading development environment (Rails 6.0.3)
>> user = User.new
   (1.4ms)  SELECT sqlite_version(*)
=> #<User id: nil, name: nil, email: nil, created_at: nil, updated_at: nil>
>> user.class.superclass
=> ApplicationRecord(abstract)
>> user.class.superclass.superclass
=> ActiveRecord::Base
>> user.class.superclass.superclass.superclass
=> Object

Classe d'utilisateurs

Ici aussi, je résumerai les points que je souhaite personnellement retenir.

-Attr_accessor: définit les accesseurs (getters, setters) pour les attributs. En définissant cela, vous pouvez attribuer une valeur à une instance ou recevoir une valeur d'une instance.

-Variable avec @: variable d'instance. S'il est défini dans le contrôleur, il peut être utilisé dans la vue et peut être utilisé en commun au sein de la même classe.

-Initialize method: Appelé automatiquement lorsqu'une instance est créée par la nouvelle méthode. Utilisé pour initialiser les variables d'instance.

-Lire un fichier avec require, charger un module avec include.

Exercice
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 + "\s" + @last_name
  end
  def formatted_email
    "#{full_name} <#{@email}>"
  end
end
  def alphabetical_name
    @last_name + ",\s" + @first_name
  end
>> example.full_name.split == example.alphabetical_name.split(', ').reverse
=> true

Vers le chapitre précédent

Vers le chapitre suivant

Recommended Posts

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
Résumé du routage Rails 6.0
Rails Learning jour 2