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
Découvrez la grammaire et la structure de Ruby pour l'avenir.
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'
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.
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
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
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.
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.
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
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
>> "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
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.
>> 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
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.
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.
>> 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"
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 ...
>> 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"}
>> { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
=> {"a"=>100, "b"=>300}
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.
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"
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
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
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.
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
Recommended Posts