[RUBY] Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3

Ü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 kann es lächerliche oder falsche Inhalte enthalten. Bitte beachten Sie. Ich würde es begrüßen, wenn Sie mir implizit sagen könnten ...

Quelle Rails Tutorial

Was ist von nun an zu tun?

Wir werden umfassend lernen, wie man Rails-Apps erstellt, indem wir eine Twitter-ähnliche Beispiel-App Sample_app erstellen. Dieses Kapitel beginnt mit dem Erstellen eines neuen Projekts Sample_app.

Ich habe Artikel bis Kapitel 2 sehr detailliert geschrieben, aber nach Kapitel 3 Die Menge an Code wird erheblich zunehmen. Was Sie also tun können, indem Sie das Rails-Tutorial lesen Ich werde es abkürzen ...

installieren

Grundeinstellung

Erstellen Sie eine neue Sample_app Aktualisieren Sie die Gemfile. Vergiss nicht - ohne Produktion, weil ich das Produktions-Juwel diesmal nicht noch einmal installieren möchte. Da es sich um eine neue Anwendung handelt, initialisieren Sie das Git-Repository. READ ME wird auch hier umgeschrieben. Nachdem Sie die README-Datei neu geschrieben haben, legen Sie sie vorerst fest. Erstellen Sie auch ein Remote-Repository für Sample_app auf Github. Nachdem Sie ein Remote-Repository erstellt haben, drücken Sie es Bearbeiten Sie in der Cloud9-Umgebung die Datei development.rb, damit die App lokal gestartet werden kann. Fügen Sie vorerst einfach den Code für Hallo und Weltanzeige wie in Kapitel 2 hinzu und senden Sie ihn an Heroku.

Übung
  1. README wird automatisch am unteren Rand der oberen Seite des Github-Repositorys angezeigt. Natürlich können Sie die Datei öffnen und direkt nachsehen image.png
  2. Sie können sehen, dass Hallo, Welt! Angezeigt wird. image.png Bohnenwissen hier Sie können den Domainnamen der auf Heroku bereitgestellten App mit "Heroku-Domains" überprüfen.

Statische Seite

Erstellen Sie aus Entwicklungsgründen jedes Mal, wenn Sie etwas implementieren, einen Themenzweig, anstatt immer am Hauptzweig zu arbeiten Es wird gesagt, dass es eine gute Angewohnheit ist, zu arbeiten. Auf diese Weise ist es einfach, die Arbeit zu teilen. Leicht zu sehen, die Arbeit Es gibt verschiedene Vorteile. Erstellen Sie jedes Mal einen Themenzweig, um sich daran zu gewöhnen und zu arbeiten

$ git checkout -b static-pages
Statische Seitengenerierung

Erstellen Sie auf dem Controller sofort statische Seiten

$ rails g controller StaticPages home help 

erzeugen kann die Abkürzung g sein Es gibt andere Abkürzungen, und ich empfehle Ihnen, sich daran zu erinnern.

Befehl abschließen Kurzform
$ rails server $ rails s
$ rails console $ rails c
$ rails generate $ rails g
$ rails test $ rails t
$ bundle install $ bundle

Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/static_pages?version=6.0#table-shortcuts

Drücken Sie zu diesem Zeitpunkt vorerst den Zweig für statische Seiten aus der Ferne Wenn Sie die Option -u verwenden, um den Ursprung vor statischen Seiten festzulegen Danach können Sie den gleichen Push mit nur `` `git push``` ausführen.

Wenn der Controller automatisch mit dem Befehl generate generiert wird, wird auch die Datei route.rb automatisch aktualisiert. In diesem Fall habe ich eine Home-Aktion und eine Hilfeaktion mit "Generieren" erstellt.

routes.rb


Rails.application.routes.draw do
  get 'static_pages/home'
  get 'static_pages/help'
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root "application#hello"
end

Die Routing-Regeln für die Heim- und Hilfeaktionen werden automatisch festgelegt. Starten Sie den lokalen Server und zeigen Sie die Homepage von static_pages an. image.png

Rails verweisen auf den Router, wenn Sie die URL angeben (diesmal / static_pages / home). Führen Sie die Aktion des entsprechenden Controllers aus. (Home-Aktion des StaticPages-Controllers) Danach wird die der Aktion entsprechende Ansicht ausgegeben. Der statische Seitencontroller ändert den Inhalt nicht jedes Mal, daher ist die Aktion leer (gleicher Seiteninhalt).

Übung
$ rails g controller Foo bar baz
  1. Die Abkürzung d kann zur Zerstörung verwendet werden.
$ rails d controller Foo

Statische Seitenanpassung

Die im aktuellen Status erstellte Homepage und Hilfeseite werden in HTML vervollständigt und sind vollständig statische Seiten. Mit anderen Worten, es ist eine Seite, die ohne Kenntnis von Rails bearbeitet werden kann. Hier können Sie wie in Kapitel 2 Benutzerdaten abrufen oder Daten entsprechend dem Inhalt veröffentlichen. Rails-Wissen (ERB) ist für Aktionen erforderlich, die den Anzeigeinhalt ändern (dynamisch).

Beginnen Sie mit einem Test

Erster Test

Schreiben Sie vor dem Hinzufügen der About-Seite im Voraus einen Test für die About-Seite. Da der Befehl generate automatisch Tests für die Startseite und die Hilfeseiten generiert Führen Sie zunächst einen Test durch, um zu bestätigen, dass derzeit kein Problem vorliegt

$ rails t

...

Finished in 6.708000s, 0.2982 runs/s, 0.2982 assertions/s.
2 runs, 2 assertions, 0 failures, 0 errors, 0 skips

Red Der Test Drive Development (TDD) -Zyklus ist Schreiben Sie fehlgeschlagene Tests (Tests auf nicht implementierte Funktionen usw.) → Fehlgeschlagen (ROT) Schreiben Sie den eigentlichen Anwendungscode und bestehen Sie den zuvor geschriebenen Test → Erfolg (GRÜN) 3 Schritte des Refactorings (REFACTOR)

Auf dieser Grundlage werde ich einen Test der Info-Seite schreiben, den ich noch nicht erstellt habe

static_pages_controller_test.rb


require 'test_helper'

class StaticPagesControllerTest < ActionDispatch::IntegrationTest
  
  ...
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
  end
end

Dieser Code sendet eine GET-Anforderung an die About-Seite von static_pages Ich teste den Inhalt, dass der Antwortcode 200 OK ist (Erfolg).

Natürlich habe ich noch keine Info-Seite implementiert, daher wird der Fehler wie erwartet angezeigt.

Green Werfen wir einen Blick auf die Fehlermeldung

Error:
StaticPagesControllerTest#test_should_get_about:
NameError: undefined local variable or method `static_pages_about_url' for #<StaticPagesControllerTest:0x000055b65cfc03b0>
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

Wenn Sie es im Detail lesen In StaticPagesControllerTest sollte_get_about Für static_pages_about_url ist keine Methode definiert (es gibt keine About-URL). Ist wütend.

Dies liegt daran, dass ich kein Routing eingerichtet habe

Fügen wir das Routing sofort hinzu. in route.rb get 'static_pages/about'Hinzufügen. Durch Hinzufügen einer Route wird ein Helfer mit dem Namen static_pages_about_url aktiviert.

Wenn Sie den Test erneut ausführen, diesmal

Error:
StaticPagesControllerTest#test_should_get_about:
AbstractController::ActionNotFound: The action 'about' could not be found for StaticPagesController
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

Dies ist auch ein einfacher Fehler Ich bin wütend, dass ich die Action nicht finden kann. Dies ist das Ergebnis des Hinzufügens von Routing, um auf die About-Aktion des Controllers static_pages zu verweisen.

Fügen wir sofort eine Info-Aktion hinzu

  def about 
  end

Schreiben Sie dies einfach in den static_pages-Controller Der Inhalt der Aktion ist immer noch eine vollständig statische Seite wie "Startseite" und "Hilfe", sodass sie leer sein kann

Wenn Sie den Test damit ausführen, diesmal

Error:
StaticPagesControllerTest#test_should_get_about:
ActionController::MissingExactTemplate: StaticPagesController#about is missing a template for request formats: text/html
    test/controllers/static_pages_controller_test.rb:15:in `block in <class:StaticPagesControllerTest>'

Dies ist ärgerlich, dass die About-Vorlage (Ansicht) nicht gefunden werden kann.

Dies wird auch durch Hinzufügen einer Ansicht unterstützt. Fügen Sie about.html.erb in app / views / static_pages hinzu.

Der Test ist in diesem Zustand erfolgreich (GRÜN)

Finished in 0.976764s, 3.0714 runs/s, 3.0714 assertions/s.
3 runs, 3 assertions, 0 failures, 0 errors, 0 skips

Eine leicht dynamische Seite

Ändern Sie den Titel dynamisch. Deaktivieren Sie das Layout für das Studium

$ mv app/views/layouts/application.html.erb layout_file

Dieser Befehl benennt die Layoutdatei application.html.erb vorübergehend um und verschiebt sie, um sie zu deaktivieren.

Schreiben Sie zuerst den Titel-Test Der Titel sollte sich von Seite zu Seite ändern, damit der Code so aussieht.

  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | Ruby on Rails Tutorial Sample App"
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | Ruby on Rails Tutorial Sample App"
  end
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | Ruby on Rails Tutorial Sample App"
  end

Wählen Sie das Titel-Tag aus und stellen Sie sicher, dass der Inhalt übereinstimmt. Natürlich ist der Test ROT, weil er nicht implementiert ist

Schreiben Sie zunächst die Ansicht des Hauses, der Hilfe und der Seite neu.

Da ich für jede Seite einen Titel festgelegt habe, ist der Test GRÜN.

Finished in 0.062407s, 48.0717 runs/s, 96.1433 assertions/s.
3 runs, 6 assertions, 0 failures, 0 errors, 0 skips

Übung

  1. Sie können die Variable erweitern, indem Sie die Variable mit # {} in den Teil (Zeichenfolge) einschließen, der in doppelte Anführungszeichen eingeschlossen ist. Dieses Mal wird der Variablen die Zeichenfolge Ruby on Rails Tutorial Sample App zugewiesen, sodass die Zeichenfolge erweitert wird. Das Ersetzen gemeinsamer Teile durch Variablen und die Möglichkeit, flexibel auf Änderungen zu reagieren, ist eine grundlegende Angelegenheit, die sich in keiner Programmiersprache ändert.
  def setup
    @base_title = "Ruby on Rails Tutorial Sample App"
  end
  test "should get home" do
    get static_pages_home_url
    assert_response :success
    assert_select "title", "Home | #{@base_title}"
  end

  test "should get help" do
    get static_pages_help_url
    assert_response :success
    assert_select "title", "Help | #{@base_title}"
  end
  
  test "should get about" do
    get static_pages_about_url
    assert_response :success
    assert_select "title", "About | #{@base_title}"
  end

Layout und Einbettung von Ruby

Zu diesem Zeitpunkt wird der größte Teil der HTML-Struktur (grundlegende Tags wie head) auf allen Home-, Hilfe- und About-Seiten dupliziert. Der Titel ist auch für die Ruby on Rails Tutorial-Beispiel-App identisch. Es ist wichtig, solche Duplikate und TROCKEN zu entfernen.

Die Bereitstellungsmethode befindet sich in der Ansicht

Symbol,"String")Durch Angabe


 Sie können die dem Symbol zugeordnete Zeichenfolge mit Yield aufrufen.
 Ruby-Code kann in Ansichten verwendet werden
 Die Ansicht ist eingebettet Ruby [ERB (Embedded RuBy)] ist eine Datei im Format, mit der Sie Ruby in HTML einbetten können.
 Schließen Sie <%%> ein und führen Sie einfach die darin enthaltene Anweisung aus
 Der Unterschied besteht darin, dass, wenn Sie es in <% =%> einschließen, die darin enthaltene Anweisung ausgeführt und das Ergebnis in die Vorlage eingefügt wird.

 Hier ist das Ergebnis des Umschreibens des Titelteils mithilfe dieses Mechanismus

```erb
<% provide(:title,"Help") %>
<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title) %> | Ruby on Rails Tutorial Sample App</title>
  </head>

Natürlich besteht der Test auch.

Wenn dies so bleibt, bleiben die gemeinsamen Teile erhalten, sodass ich es sofort umgestalten werde. Aktivieren Sie zunächst die zuvor deaktivierte Layoutdatei

mv layout_file app/views/layouts/application.html.erb

Ersetzen Sie dann die Titel-Tags, die einzeln in Home, Help und About platziert wurden, durch die Titel-Tags der Layoutdatei.

erb:application.html.erb


<!DOCTYPE html>
<html>
  <head>
    <title><%= yield(:title)%> | Ruby on Rails Tutorial Sample App</title>
    <%= csrf_meta_tags %>
    <%= csp_meta_tag %>

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

  <body>
    <%= yield %>
  </body>
</html>

Der Inhalt der Ansicht jeder Seite wird wie im Ertragsteil ersetzt. Mit anderen Worten, was wird angezeigt, wenn versucht wird, jede Seite anzuzeigen? Es ist application.html.erb, die die Ansicht jeder Seite lädt.

Danach bleiben zusätzliche Dinge wie HTML-Tags in der Ansicht jeder Seite und so wie es ist, application.html.erb Da es dupliziert wird, löschen Sie unnötige Teile und machen Sie die Ansicht jeder Seite nur zum Inhalt.

erb:help.html.erb


<% provide(:title,"Help") %>
<h1>Help</h1>
<p>
  Get help on the Ruby on Rails Tutorial at the
  <a href="https://railstutorial.jp/help">Rails Tutorial help page</a>.
  To get help on this sample app, see the
  <a href="https://railstutorial.jp/#ebook"><em>Ruby on Rails Tutorial</em>
  book</a>.
</p>
Übung
  1. Schreiben Sie zuerst den Kontakttest (TDD)

static_pages_controller_test.rb


 
  test "should get contact" do
    get static_pages_contact_url
    assert_response :success
    assert_select "title", "Contact | #{@base_title}"
  end

Fügen Sie danach das Routing für Kontakte zu route.rb und hinzu Fügen Sie static_pages_controller eine Kontaktaktion hinzu Erstellen Sie einfach eine Kontaktansicht.

Finished in 1.044651s, 3.8290 runs/s, 7.6581 assertions/s.
4 runs, 8 assertions, 0 failures, 0 errors, 0 skips

Der Test besteht ebenfalls.

Routing-Einstellungen

Vorerst habe ich die Aktion "Hallo" so eingestellt, dass "Hallo, Welt" in der Root-URL angezeigt wird, die bereitgestellt werden soll. Ich habe diesmal eine Homepage erstellt, daher werde ich sie dorthin verschieben root 'static_pages/home'

Übung

static_pages_controller_test.rb


  test "should get root" do
    get root_url
    assert_response :success
  end
  1. Ruby kann die Zeile auskommentieren, indem er am Zeilenanfang # hinzufügt Windows kann die Zeile übrigens mit STRG + / auskommentieren. Kommentieren Sie die Root-URL aus. `` `# root'static_pages # home'```
Error:
StaticPagesControllerTest#test_should_get_root:
NameError: undefined local variable or method `root_url' for #<StaticPagesControllerTest:0x000055d85cb31200>
    test/controllers/static_pages_controller_test.rb:10:in `block in <class:StaticPagesControllerTest>'

Ich habe eine Fehlermeldung erhalten, wenn die root_url-Methode nicht definiert wurde.

Sie können sehen, dass der root_url-Helfer verwendet werden kann, indem Sie die rootURL festlegen.

Zusammenfassung dieses Kapitels

Da ist die Arbeit von Kapitel 3 abgeschlossen Verpflichten Wenn Sie den Test während der Bereitstellung ausführen, müssen Sie sich nach der Bereitstellung keine Gedanken mehr über das Auffinden von Fehlern machen.

← Zum vorherigen Kapitel

Zum nächsten Kapitel →

Recommended Posts

Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 10
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 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 6.0-Routing-Zusammenfassung
Schienen lernen Tag 2
Schienen db: 〇〇 Zusammenfassung
[Anfänger] Rails Tutorial
[Lernnotiz] Metaprogramming Ruby 2. Ausgabe: Kapitel 3: Methode
Schienen Lerntag 1