[RUBY] Schienen-Tutorial Kapitel 7

Einführung

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.

Kapitel 7 Benutzerregistrierung

7.1.2 Benutzerressource

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.

7.2.2 HTML-Formular

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

7.3.1 Richtige Form

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

7.3.4 Test auf Fehler

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

7.4.1 Ausfüllen des Anmeldeformulars

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

7.4.3 Tatsächliche Benutzerregistrierung

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.

7.4.4 Erfolgreicher Test

Ü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

Am Ende

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

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 3 Lernen
Rails Tutorial Memorandum (Kapitel 3, 3.1)
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
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
[Rails Tutorial Kapitel 4] Ruby mit Rails-Geschmack
Rails Tutorial Test
[Rails Tutorial Kapitel 5] Erstellen Sie ein Layout
Rails Tutorial Memorandum 1
Rails Tutorial Memorandum 2
Tutorial zum Kauen der Schienen [Kapitel 2 Spielzeuganwendung]
[Anfänger] Rails Tutorial
Rails Tutorial (4. Ausgabe) Memo Kapitel 6
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 Kapitel 0: Vorbereitende Grundkenntnisse 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 8
Kapitel 4 Rails Flavoured Ruby
Schienen Tutorial Cheet Sheet
[Rails] Lernen mit Rails Tutorial
Schienen Tutorial Fighting Record III
Kauen der Schienen Tutorial [Kapitel 3 Erstellen fast statischer Seiten]
Beheben Sie Gem :: FilePermissionError, wenn Sie Gem Install Rails ausführen (Rails Tutorial Kapitel 1).
11.1 AccountActivations-Ressource: Rails Tutorial Memorandum-Kapitel 11
Rails Tutorial Records und Memorandum # 0
Ich habe Rails Anfänger ausprobiert [Kapitel 1]
Rails Tutorial 4. Ausgabe: Kapitel 1 Von Null bis Bereitstellung
Beheben Sie ActiveRecord :: NoDatabaseError, wenn Sie einen Rails-Test durchführen (Rails-Tutorial, Kapitel 3).