[RUBY] Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 4

Überblick

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

Was ist in diesem Kapitel zu tun?

Erfahren Sie mehr über Rubys Grammatik und Struktur für die Zukunft.

Motivation

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'

Eingebauter Helfer

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.

Benutzerdefinierter 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

Zeichenfolgen und Methoden

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.

String

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.

Übung

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

Übergeben von Objekten und Nachrichten

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

Übung
>> "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

Methodendefinition

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.

Übung
>> 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

wieder Titelhelfer

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.

Andere Datenstrukturen

Array- und Bereichsoperator

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.

Übung
>> 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"

Block

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 ...

Übung
>> 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"}
  1. Überschreiben Sie, wenn der Schlüssel vorhanden ist, und fügen Sie eine neue Hash-Methode hinzu, wenn er nicht vorhanden ist Der Wert von "b" wird überschrieben, da der Schlüssel "b" vorhanden ist Mit anderen Worten
>> { "a" => 100, "b" => 200 }.merge({ "b" => 300 })
=> {"a"=>100, "b"=>300}

Wieder CSS

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.

Klassen in Ruby

Konstrukteur

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"

Controller-Klasse

image.png 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

Übung
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

Benutzerklasse

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.

Übung
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

Zum vorherigen Kapitel

Zum nächsten Kapitel

Recommended Posts

Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 7
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 4
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 9
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 6
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 2
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 8
Rails Tutorial (4. Ausgabe) Memo Kapitel 6
Rails Tutorial Kapitel 3 Lernen
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
Rails Tutorial 4. Ausgabe: Kapitel 1 Von Null bis Bereitstellung
Schienen-Tutorial Kapitel 6
Schienen-Tutorial Kapitel 1
Schienen-Tutorial Kapitel 7
Schienen-Tutorial Kapitel 5
Schienen-Tutorial Kapitel 10
Schienen-Tutorial Kapitel 9
Schienen-Tutorial Kapitel 8
Rails Tutorial Kapitel 0: Vorbereitende Grundkenntnisse 5
[Rails] Lernen mit Rails Tutorial
Rails Tutorial Memorandum (Kapitel 3, 3.1)
[Rails Tutorial Kapitel 4] Ruby mit Rails-Geschmack
[Rails Tutorial Kapitel 5] Erstellen Sie ein Layout
Tutorial zum Kauen der Schienen [Kapitel 2 Spielzeuganwendung]
Schienen Tutry
Schienen Tutorial
Schienen Tutry
Deshalb habe ich dieses Mal die Methode "Verknüpfen des Inhalts des Verzeichnisses" übernommen. Ich denke, es wird je nach Zeit und Fall richtig verwendet. Tutorial zu Linux, ln, Linux-Befehlsschienen
Schienen Tutry
Schienen Tutorial
Schienen Tutorial
Nur Zusammenfassung zum Einrichten des Rails-Tutorials
Rails Tutorial Test
Rails Tutorial Memorandum 1
Rails Tutorial Kapitel 1 Von Null bis Bereitstellung [Try]
Rails Lerntag 3
Rails Tutorial Memorandum 2
Rails Lerntag 4
Rails 6.0-Routing-Zusammenfassung
Schienen lernen Tag 2