Ich werde den Prozess der Weiterentwicklung des Rails-Tutorials selbst veröffentlichen.
Es berührt Wörter, die ich dabei nicht verstanden habe, und hat Fehler blockiert.
Bitte weisen Sie auf Fehler hin, da diese auf persönlichem Lernen beruhen.
Da dies mein erster Beitrag ist, denke ich, dass es viele Orte gibt, die schwer zu lesen sind, aber bitte verzeihen Sie mir.
Zeigen Sie Benutzerinformationen in einer Webanwendung gemäß den Konventionen der REST-Architektur an.
Was ist REST?
REST bezieht sich auf die Modellierung der Komponenten, aus denen eine Anwendung besteht (z. B. Benutzer und Mikroposts), als "Ressourcen". Diese Ressourcen unterstützen sowohl CRUD-Operationen (Create / Read / Update / Delete) als auch vier grundlegende HTTP-Anforderungsmethoden (POST / GET / PATCH / DELETE) für relationale Datenbanken. tun. Spalte 2.2 (Rails-Tutorial Zitiert aus Kapitel 2)
Mit anderen Worten, ist es ein Bild, das das Benutzermodell als Ressource verwendet und sowohl Datenoperationen (Erstellen, Anzeigen, Aktualisieren, Löschen) als auch Anforderungsmethoden (POST / GET / PATCH / DELETE) unterstützt?
Auf diese Weise ・ Vereinfacht Controller- und Aktionsentscheidungen (Wenn es sich um eine Ressource handelt, wird sie automatisch festgelegt.) · Dynamische Webseitenerstellung (Benutzerinformationen in einer Webanwendung usw. anzeigen) Ist es möglich zu realisieren?
Verwenden Sie das Routing, wenn Sie das Benutzermodell als Ressource verwenden
resources :users
Es scheint sich zu füllen.
Ich habe ein Registrierungsformular für neue Benutzer erstellt. Ich werde nur die Teile ergänzen, die schwer zu verstehen waren.
<%= form_with(model: @user, local: true) do |f| %>
<%= f.label :name %>
<%= f.text_field :name %>
<%= f.label :email %>
<%= f.email_field :email %>
<%= f.label :password %>
<%= f.password_field :password %>
<%= f.label :password_confirmation, "Confirmation" %>
<%= f.password_field :password_confirmation %>
<%= f.submit "Create my account", class: "btn btn-primary" %>
<% end %>
form_with sendet standardmäßig eine "entfernte" XHR-Anfrage, aber hier möchte ich eine reguläre "lokale" Formularanfrage senden, um mit ziemlicher Sicherheit eine Fehlermeldung anzuzeigen (7.3.3). (Rails Tutorial Zitiert aus Kapitel 7)
Was meinst du,,, Was ist eine "entfernte" XHR-Anfrage?
Ich habe es nachgeschlagen. XHR scheint Ajax zu heißen. Und Ajax ist eine asynchrone Kommunikation, und grob gesagt scheint es möglich zu sein, die Anzeige eines Teils der Seite ohne Seitenübergang durch eine Anforderung im js-Format zu ändern.
Referenz https://qiita.com/tambo/items/45211df065e0c037d032
Im Rails-Tutorial möchten Sie anscheinend eine HTML-Formatanforderung senden, dh eine normale lokale Formularanforderung, um mit ziemlicher Sicherheit die Fehlermeldung anzuzeigen. Warum wird die Fehlermeldung bei einer Remote-Anforderung unsicher angezeigt? Nun, ich verstehe, dass die lokale Anfrage für die sample_app ausreicht, die ich gerade erst erstelle.
Abgesehen davon scheint es in Forms_Tag und Form_For vor Rails 5, dass der Standard ein lokales Formular anstelle eines Remote-Formulars war.
Als nächstes wusste ich nichts über HTML-Formular-Tags und habe sie nachgeschlagen.
Referenzartikel ① http://www.htmq.com/html5/form.shtml Eine grobe Beschreibung der Formular-Tags.
Referenzartikel ② https://developer.mozilla.org/ja/docs/Learn/Forms/How_to_structure_an_HTML_form Das Etikett ist auch geschrieben.
Die Blockvariable (f) ruft die Methode auf, die das Eingabe-Tag für das Attribut des Objekts (in diesem Fall @user) generiert, das an das erste Argument von form_with übergeben wird.
Referenz https://rakuda3desu.net/rakudas-rails-tutorial7-2/
Rails weiß, dass die Klasse von @ user Benutzer ist. Da @user ein neuer Benutzer ist, entscheidet Rails außerdem, dass das Formular mit der Post-Methode erstellt werden soll. (Rails Tutorial Zitiert aus Kapitel 7)]
Ich habe untersucht, was dieser Teil bedeutet.
Referenzartikel ① https://qiita.com/hmmrjn/items/24f3b8eade206ace17e2 Wenn ein verwandtes Modell vorhanden ist und @user in der Datenbank vorhanden ist, springt es anscheinend zur Aktualisierungsaktion, andernfalls springt es zur Erstellungsaktion.
Referenzartikel ② https://pikawaka.com/rails/form_with Dieser Artikel war auch leicht zu verstehen.
Wenn die vom Controller erstellte Instanz von der neuen Methode neu erstellt wurde und keine Informationen enthält, wird sie automatisch von der Erstellungsaktion erstellt. Wenn sie bereits über die Informationen verfügt, wird sie automatisch von der Aktualisierungsaktion erstellt. Es wird es klären. (Zitiert aus dem obigen Artikel)
Ich denke, ich habe es sehr gut verstanden ...
params enthält Hashes (Hash-of-Hashes: verschachtelte Hashes) für mehrere Hashes. In den Debug-Informationen wird das Ergebnis der Formularübermittlung im Benutzer-Hash mit den Attributen gespeichert, die dem übermittelten Wert entsprechen. Der Schlüssel dieses Hashs ist der Wert des Namensattributs, das sich im Eingabe-Tag befand. Zum Beispiel:
<input id="user_email" name="user[email]" type="email" />
Der Wert "Benutzer [E-Mail]" entspricht dem Wert des: E-Mail-Schlüssels im Benutzer-Hash. (Rails Tutorial Zitiert aus Kapitel 7)]
Ein wichtiger Punkt hier !!
7.3.2 Strong Parameters
params.require(:user).permit(:name, :email, :password, :password_confirmation)
Was ist die erforderliche Methode? Geben Sie die zu empfangende Parametergruppe an
Was ist die Genehmigungsmethode? Geben Sie die verfügbaren Parameternamen an
Referenz https://techacademy.jp/magazine/22078
Übung 1 Ein Fehler ist aufgetreten !!
test/integration/users_signup_test.rb
#Listing 7:.25:Vorlage zum Testen von Fehlermeldungen
require 'test_helper'
class UsersSignupTest < ActionDispatch::IntegrationTest
test "invalid signup information" do
get signup_path
assert_no_difference 'User.count' do
post users_path, params: { user: { name: "",
email: "user@invalid",
password: "foo",
password_confirmation: "bar" } }
end
assert_template 'users/new'
assert_select 'div#<CSS id for error explanation>'
assert_select 'div.<CSS class for field with error>'
end
.
.
.
end
Nachdem Sie Listing 7.25 geschrieben und einen Test durchgeführt haben
ERROR["test_invalid_signup_information", #<Minitest::Reporters::Suite:0x000000000adddc40 @name="UsersSignupTest">, 0.3698949000099674]
test_invalid_signup_information#UsersSignupTest (0.37s)
Nokogiri::CSS::SyntaxError: Nokogiri::CSS::SyntaxError: unexpected '#' after '[#<Nokogiri::CSS::Node:0x000000000addfc70 @type=:ELEMENT_NAME, @value=["div"]>]'
test/integration/users_signup_test.rb:13:in `block in <class:UsersSignupTest>'
Und der Fehler,
Listing 7.25 wurde hinzugefügt
assert_select 'div#<CSS id for error explanation>'
assert_select 'div.<CSS class for field with error>'
Dies sind die beiden obigen Sätze.
<CSS id for error explanation>
Ah. .. .. Hier werden nur Hinweise geschrieben, und Sie müssen den Ausweis selbst schreiben ... Damit
assert_select 'div#error_explanation'
assert_select 'div.field_with_errors'
Ich habe es repariert.
app/controllers/users_controller.rb
#Listing 7:.26:Benutzererstellungsaktion zum Speichern und Umleiten
class UsersController < ApplicationController
.
.
.
def create
@user = User.new(user_params)
if @user.save
redirect_to @user
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :password,
:password_confirmation)
end
end
redirect_to @user
Ich kann die Bedeutung des obigen Codes verstehen, habe mich aber darauf bezogen, weil es einen Artikel gibt, der ihn ausführlich beschreibt.
Referenz https://qiita.com/Kawanji01/items/96fff507ed2f75403ecb
Gemäß Tutorial 5.3.2 verwenden Rails-Konventionen jedoch grundsätzlich relative Pfade für Links, aber absolute Pfade für Umleitungslinks. (Zitiert aus dem obigen Artikel)
War das so Wenn du aufschaust
Das Rails-Lernprogramm folgt den allgemeinen Konventionen und verwendet grundsätzlich das _path-Format und nur für Weiterleitungen das _url-Format. Dies liegt daran, dass der HTTP-Standard bei der Umleitung eine vollständige URL erfordert. (Rails Tutorial Zitiert aus Kapitel 5)]
Es war wahr ...
ein Problem ist aufgetreten !! So setzen Sie die Datenbank zurück
rails db:migrate:reset
Ausführen. Es kann aber nicht zurückgesetzt werden.
ermission denied @ apply2files - C:/environment/sample_app/db/development.sqlite3
Couldn't drop database 'db/development.sqlite3'
rails aborted!
Errno::EACCES: Permission denied @ apply2files - C:/Users/81801/environment/sample_app/db/development.sqlite3
bin/rails:4:in `require'
bin/rails:4:in `<main>'
Tasks: TOP => db:drop:_unsafe
(See full trace by running task with --trace)
Lösung Ich habe es unter Bezugnahme auf den folgenden Artikel gelöst. https://teratail.com/questions/67393 https://qiita.com/Toshiki23/items/f366504844fd22ad87d9
Anscheinend mit sqlite3 für die Datenbank in Windows Schienen fallen Befehl Schienen db: Befehl zurücksetzen Schienen db: migrate: Befehl zurücksetzen Scheint Probleme zu verursachen. Leider Fenster ...
Löschen Sie die Datei db / development.sqlite3 manuell aus dem Editor-Explorer, wie im Artikel beschrieben (da der Befehl rm an der Eingabeaufforderung nicht befolgt wurde).
rails db:create db:migrate
Als ich es wieder ausgeführt habe
Database 'db/development.sqlite3' already exists
Database 'db/test.sqlite3' already exists
Ich hätte es löschen sollen, aber es bleibt ... Die Datei development.sqlite3 ist sicherlich aus dem von mir verwendeten Editor verschwunden ...
,,,,Was soll ich machen! !! !! !! !! Ich habe vorerst nach dem Verbleib der gelöschten Datei development.sqlite3 gesucht.
Referenz https://maitakeramen.hatenablog.com/entry/2018/02/08/131755
Ich kann es aus irgendeinem Grund nicht finden, wenn ich nach dem Mülleimer suche ... (Liegt es daran, dass es nicht gelöscht wurde?)
Ich habe danach gesucht und als ich mir das Verzeichnis sample_app / db im Windows Explorer angesehen habe, habe ich die Datei development.sqlite3 gefunden !!
Ich habe es vorerst in das Datenbankverzeichnis des geöffneten Editors kopiert.
Als ich mit DB Browser for SQlite einen Blick auf die Daten warf, waren die Daten in der Benutzertabelle leer.
Ich habe versucht, die Ursache herauszufinden, aber ich habe es nicht verstanden. Vorerst haben wir das Zurücksetzen der Datenbank erreicht und werden mit dem nächsten ...
Beiseite Danach wurde mir gesagt, dass ich mit Git Bash auch Linux-Befehle verwenden kann, und danach habe ich beschlossen, dies auch zum Lernen zu verwenden.
Übung 2 Ich konnte die Übung ohne Probleme beenden, suchte aber nach dem Helfer content_tag. content_tag-Helfer content_tag (: Elementname, anzuzeigender Inhalt, Option)
Referenz https://techacademy.jp/magazine/42167
Der Inhalt wurde plötzlich schwierig. Es war auch schwierig, Konzepte wie Benutzerressourcen zu verstehen, die üblicherweise im Lernprogramm verwendet wurden. Ich konnte nicht verstehen, wie ein Formular mit dem Helfer form_with auf einmal generiert werden kann, daher habe ich es mehrmals zurückgelesen. Ich bin oft auf Fehler gestoßen und es hat lange gedauert.
Recommended Posts