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
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 ...
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.
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
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.
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).
$ rails g controller Foo bar baz
$ rails d controller Foo
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).
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
Ä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
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
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>
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.
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'
static_pages_controller_test.rb
test "should get root" do
get root_url
assert_response :success
end
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.
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.
Recommended Posts