Dieser Artikel vertieft mein Verständnis, indem er einen Kommentarartikel zum Rails-Tutorial schreibt, um mein Wissen weiter zu festigen Es ist Teil meines Studiums. In seltenen Fällen können lächerliche oder falsche Inhalte geschrieben werden. Bitte beachten Sie. Ich würde es begrüßen, wenn Sie mir implizit sagen könnten ...
Quelle Rails Tutorial 6. Ausgabe
Erfahren Sie mehr über Rubys Grammatik und Struktur für die Zukunft.
Ich fand zwar die Bequemlichkeit, Code in gewissem Umfang mit Rails schreiben zu können, ohne viel über Ruby zu wissen Wenn Sie Ruby nicht kennen, ist die Entwicklung ineffizient und Ihr Code ist begrenzt. Hier erfahren Sie auch mehr über Ruby.
Erstellen und bearbeiten Sie Themenzweige wie gewohnt.
$ git checkout -b rails-flavored-ruby
Switched to a new branch 'rails-flavored-ruby'
Es wurde in application.html.erb geschrieben, das im vorherigen Kapitel erstellt wurde
<%= stylesheet_link_tag 'application', media: 'all','data-turbolinks-track': 'reload' %>
Wir werden auch die hier verwendete Grammatik studieren. Das stylesheet_link_tag ist der in Rails integrierte Helfer.
In Rails können Sie zusätzlich zu den integrierten Funktionen Ihre eigenen definierten Funktionen verwenden. Dieses Mal wird der Standardtitel zurückgegeben, wenn dem Site-Titel in der Bereitstellungsmethode kein Wert zugewiesen wird. Lassen Sie uns eine Funktion erstellen.
Weil es ein Helfer ist, den ich in der Layoutdatei application.html.erb verwenden möchte Im Anwendungshelfer definieren
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
Wir werden mit dem Lernen über die Rails-Konsole fortfahren.
In meinem Fall habe ich einen Fehler erhalten und konnte zunächst nicht starten Beispiele und Gegenmaßnahmen werden als Referenz aufgeführt.
Fehler, der beim Start aufgetreten ist
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
Referenzseite https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers
Was tun, wenn die Rails-Konsole nicht gestartet werden kann (Fehlerausgabe "FATAL: Listen error")
Wenn der Start erfolgreich ist Eine solche Konsole wird gestartet.
Running via Spring preloader in process 6472
Loading development environment (Rails 6.0.3)
>>
Genau wie beim Terminal können Sie die Aufwärtspfeiltaste verwenden, um den zuvor eingegebenen Befehl abzurufen. Es gibt also keinen Grund, ihn nicht zu verwenden.
Nehmen wir auf, was ich persönlich für wichtig halte.
・ Zeichenketten können erstellt werden, indem sie in "" (doppelte Anführungszeichen) eingeschlossen werden.
-Variationen können in einer Zeichenfolge erweitert werden, indem sie in # {} eingeschlossen werden.
・ Zeichenketten können auch erstellt werden, indem sie in '' (einfache Anführungszeichen) eingeschlossen werden.
・ Einfache Anführungszeichen sind praktisch, wenn Sie Sonderzeichen wie # so anzeigen möchten, wie sie sind.
1.
>> city = "Shinjuku Station"
=> "Shinjuku Station"
>> prefecture = "Tokio"
=> "Tokio"
>> puts prefecture + " " + city
Shinjuku-ku, Tokio
=> nil
>> puts prefecture + "\t" + city
Shinjuku-ku, Tokio
=> nil
>> puts prefecture + '\t' + city
Tokio\t Shinjuku Ward
=> nil
Auch hier werde ich die wichtigen Teile zusammenfassen.
・ Ruby ist ein Objekt └ Zeichenfolgen, nur Zahlen, Null werden ebenfalls als Objekte behandelt
-Es ist üblich, dass Ruby-Methoden logische Werte zurückgeben, wenn sie ein?
・ Ruby ist elsif, sonst nicht wenn! ← Sei vorsichtig, weil du oft Fehler machst und nutzlose Fehler wirfst ()
-In Ruby können Sie nachfolgende if- und if-Anweisungen verwenden. → Der Code ist leicht zu lesen, übersichtlich und sehr praktisch
-Jedes Objekt wie eine Zeichenfolge oder Null kann zweimal durch Hinzufügen von zwei verweigert werden! Zu Beginn kann es also in einen logischen Wert konvertiert werden.
>> !"Wenn Sie es einmal ablehnen, wird es umgekehrt"
=> false
>> !!"Sie können das Ergebnis logisch machen, indem Sie es zweimal ablehnen"
=> true
Der einfachste Weg, dies zu verstehen, besteht darin, die Klasse des Objekts mit der Klassenmethode anzuzeigen. Sie können die Klasse eines Objekts finden, indem Sie es auf .class setzen.
>> nil.class
=> NilClass
>> "".class
=> String
>> 12.class
=> Integer
Habe immer eine Klasse wie diese
>> "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
Auch hier ist das sehr einfach. Fassen Sie nur die Hauptpunkte zusammen.
-Methoden können Standardwerte enthalten. (Argumente können weggelassen werden, wenn ein Standardwert vorhanden ist.)
-Ruby kann beschrieben werden, indem die Klammern () des Methodenarguments weggelassen werden. ← Wenn Sie dies nicht verstehen, ist der Code in den folgenden Kapiteln unklar ...
-Ruby hat einen impliziten Rückgabewert in der Methode. (Gibt implizit den letzten Ausdruck in der Methode ohne Rückgabe zurück.)
>> def show_message
>> "Nice to meet you!"
>> end
=> :show_message
>> show_message
=> "Nice to meet you!"
Es mag etwas verwirrend sein, aber wenn ich die Methode show_message ausführe, wird "Schön, Sie kennenzulernen!" Zurückgegeben. Es ist ersichtlich, dass der Auswertungsinhalt des letzten Ausdrucks in der Methode als impliziter Rückgabewert zurückgegeben wird, selbst wenn der Rückgabewert nicht in der return-Anweisung angegeben ist.
>> 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
Die Methode full_title ist in Application Helper geschrieben. Modul Application Helper ist eine Funktion zum Gruppieren von Methoden. Diejenigen, die dieses Modul unter Verwendung des Include-Modulnamens verwenden können
Dies ist eine der praktischen Funktionen von Rails, und das Hilfsmodul wird ohne Erlaubnis geladen, sodass Sie sich nicht die Mühe machen müssen, es einzuschließen. Kann verwendet werden.
ApplicationHelper kann auch in jeder Ansicht für das gemeinsame Hilfsmodul aller Ansichten verwendet werden. Super praktisch.
Hier ist auch eine Zusammenfassung der Punkte.
・ Für Arrays können verschiedene Methoden wie Sortieren, Umkehren und Mischen verwendet werden. Diese Methoden geben nur einen Wert zurück, der Inhalt des Arrays ändert sich nicht Fügen Sie am Ende der Methode "Destruktive Methode" hinzu, um den Inhalt so umzuschreiben, wie er ist.
-Elemente können mit push oder << am Ende eines Arrays hinzugefügt werden.
・ Wenn 0..4 angegeben ist, wird 0,1,2,3,4 zurückgegeben. (Bereichsobjekt)
・ Obwohl es etwas kompliziert ist, geben Sie ein Bereichsobjekt und -1 als Index des Arrays an
>> a[2..-1]
=> [2, 3, 4, 5, 6, 7, 8, 9]
Diese Art der Operation kann realisiert werden Das Bereichsobjekt wird zu diesem Zeitpunkt von 2 bis zum Ende des Arrays angegeben.
>> 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"
Das Blockieren ist sehr praktisch, aber mit Ruby-Funktionen schwierig
(1..5).each { |i| puts 2 * i }Wenn ich versuche, es sanft auf Japanisch zu lesen
Machen Sie 2 x diese Zahl für jede Zahl von 1 bis 5. … Es ist schwer zu verstehen ()
Sie nehmen die Bereichsobjekte 1..5 einzeln heraus, setzen sie in die Variable i und setzen das Ergebnis von 2 * i.
Schwer zu erklären ...
Wenn Sie dies ohne Verwendung von Blöcken implementieren
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
Sie können die Menge an Code reduzieren, indem Sie Blöcke verwenden + Sie können ihn anwenden. Mit anderen Worten, es ist super bequem und wichtig. das ist alles…
Zeiten → Wiederholen Sie die Verarbeitung im Block so oft wie angegeben.
jeweils → Wenden Sie die Verarbeitung im Block auf jedes Element an, z. B. ein Array oder ein Bereichsobjekt.
map → Wenden Sie die Verarbeitung im Block auf jedes Element an, z. B. ein Array oder ein Bereichsobjekt, und geben Sie das Ergebnis zurück.
Wenn Sie dies verstehen und Blöcke verwenden, können Sie die Blöcke im Lernprogramm bis zu einem gewissen Grad verstehen.
Die Beschreibung des im Tutorial verwendeten Testcodes von minitest ist ebenfalls ein Block.
test "it is a test" do
end
In dieser Beschreibung ist der von do end umgebene Teil ein Block.
##### Übung
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. Dies ist ein Umweg, wenn Sie die Karte gemäß den Anweisungen in der Problembeschreibung verwenden
Wie man keine Karte benutzt
def yeller(strings) strings.join.upcase end => :yeller
yeller(['o','l','d']) => "OLD"
wie man Karte benutzt
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 und Symbol
Ich werde die Erklärung hier weglassen, aber nur auf eine achten
Hash-Abkürzung
#### **`params = { name: "Michael", email: "[email protected]"}`**
Vergessen Sie nicht, dass hier nur die Symbole `: name``` und`
: email``` als Schlüssel verwendet werden.
Weil ich es nicht gut verstanden habe
In einem späteren Kapitel
params [: user] [: email] Warum ist es ein Symbol, wenn es geschrieben wird? Lass das nicht zu ...
>> numbers = { "one" => "uno", "two" => "dos", "three" => "tres"}
=> {"one"=>"uno", "two"=>"dos", "three"=>"tres"}
>> numbers.each { |key,value| puts "'#{key}'Spanisch ist'#{value}'"}
'one'Spanisch ist'uno'
'two'Spanisch ist'dos'
'three'Spanisch ist'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}
Hier werde ich versuchen, die in der Layoutdatei geschriebene bedeutungslose Zeile zu entschlüsseln
stylesheet_link_tag 'application', media: 'all',
'data-turbolinks-track': 'reload'
Diese Zeile ist -Die Klammern beim Aufrufen einer Methode können weggelassen werden. -Das {} des Hash des letzten Arguments beim Aufrufen einer Methode kann weggelassen werden. Es wird mit der Regel vereinfacht. Wenn Sie ohne Vereinfachung schreiben
stylesheet_link_tag ('application', {media: 'all',
'data-turbolinks-track': 'reload'})
Wird sein.
Normalerweise wird eine Instanz einer Klasse mit new erstellt.
Beispiel `` `user = User.new Dies wird als benannter Konstruktor bezeichnet und ruft eine neue Methode für den Klassennamen auf. Einige Klassen können jedoch unterschiedlich instanziiert werden Beispiel
"Hallo"
a = [1,2,3]```
0..5
Diese werden als wörtliche Konstruktoren bezeichnet
Dies sind Instanzen der Klassen String, Array und Range.
##### Übung
1 ... Operator → 0..10 usw.
2.
Range.new(1,10) => 1..10
3.
(0..10) == Range.new(0,10)
=> true
#### Klassenvererbung
Ausgelassen, wie im Tutorial ausführlich beschrieben
##### Übung
1. Alle erben die Object-Klasse.
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
#### Integrierte Klasse ändern
Integrierte Klassen, die in Ruby vorhanden sind
Kann erweitert werden. Sie sollten integrierte Klassen nicht erweitern, es sei denn, Sie haben nur einen guten Grund
Rails fügt seinen integrierten Klassen einige häufig verwendete Convenience-Methoden hinzu.
##### Übung
Versuchen Sie gleichzeitig 1,2,3.
```irb
>> class String
>> def palindrome?
>> downcase == downcase.reverse
>> end
>> def shuffle
>> split('').shuffle.join
>> end
>> end
=> :shuffle
>> "racecar".palindrome?
=> true
>> "racecar".shuffle
=> "reaarcc"
Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/rails_flavored_ruby?version=6.0#fig-static_pages_controller_inheritance
Die in Kapitel 3 erstellte Vererbungsstruktur des StaticPages-Controllers sieht folgendermaßen aus
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
Auch hier werde ich die Punkte zusammenfassen, an die ich mich persönlich erinnern möchte.
-Attr_accessor: Definiert Accessoren (Getter, Setter) für Attribute. Indem Sie dies definieren, können Sie einer Instanz einen Wert zuweisen oder einen Wert von einer Instanz erhalten.
-Variabel mit @: Instanzvariable. Wenn in der Steuerung definiert, kann es in der Ansicht verwendet und innerhalb derselben Klasse gemeinsam verwendet werden.
-Initialize-Methode: Wird automatisch aufgerufen, wenn eine Instanz von der neuen Methode erstellt wird. Wird zum Initialisieren von Instanzvariablen verwendet.
-Lesen Sie eine Datei mit require, laden Sie ein Modul mit 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