[RUBY] Schienen-Tutorial Kapitel 8

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 8 Grundlegender Anmeldemechanismus

8.1.2 Anmeldeformular

Ich habe nicht verstanden, wie der Umfang beim Erstellen des Anmeldeformulars funktioniert, also habe ich es nachgeschlagen.

form_with(url: login_path, scope: :session, local: true)

Referenz https://qiita.com/akilax/items/f36b13f377f7e442bc73

Es scheint gut, sich das Präfix des Namenswerts vorzustellen, der benötigt wird, wenn Parameter übergeben werden, ohne zu viel nachzudenken.

Grob gesagt in Form eines Objekts, das Active Recode erbt

<%= form_with(model: @user, local: true) do |f| %>
  <%= f.label :name %>
  <%= f.text_field :name, class: 'form-control' %>
.
.
<% end %>

Und Zugriff auf den Eingabewert (Namenswert des generierten Eingabetags)

params[:user][:name]

Das Eingabeergebnis wurde im Benutzer-Hash gespeichert.

Das gleiche gilt für dieses Sitzungsformular, und ich denke, dass das Eingabeergebnis in dem durch den Bereich angegebenen Hash gespeichert wird, um den Wert des Eingabeergebnisses an den Parameter zu übergeben.

8.1.4 Flash-Meldung anzeigen

Zeigt eine Fehlermeldung an, wenn die Anmeldung fehlschlägt.

app/controllers/sessions_controller.rb


#Listing 8:.8:Verarbeitet die Verarbeitung, wenn die Anmeldung fehlschlägt (mit Fehler)
class SessionsController < ApplicationController

  def new
  end

  def create
    user = User.find_by(email: params[:session][:email].downcase)
    if user && user.authenticate(params[:session][:password])
      #Nach der Benutzeranmeldung zur Benutzerinformationsseite umleiten
    else
      flash[:danger] = 'Invalid email/password combination' #Nicht wirklich richtig
      render 'new'
    end
  end

  def destroy
  end
end

Mit dem obigen Code verschwindet die Anforderungs-Flash-Nachricht nicht, sobald sie angezeigt wird. Anders als bei Verwendung der Umleitung in Listing 7.27 wird das Erzwingen des erneuten Renderns der angezeigten Vorlage durch die Rendermethode nicht als Anforderung betrachtet, sodass die Anforderungsnachricht nicht verschwindet. Wenn Sie beispielsweise absichtlich ungültige Informationen eingeben und diese zur Anzeige einer Fehlermeldung senden und dann auf die Startseite klicken, wird die Flash-Nachricht dort weiterhin angezeigt. (Rails Tutorial Zitiert aus Kapitel 8)


Hier stellt sich die Frage, warum die Nachricht nicht verschwindet, wenn sie nicht als Anfrage betrachtet wird, und warum sie möglicherweise verschwindet, weil beim Klicken auf die Startseite nach dem Anzeigen der Fehlermeldung eine GET-Anfrage gestellt wird. Ich tat.

Um diese Frage zu lösen, habe ich zuerst den Unterschied zwischen render und redirect_to untersucht.

Referenz https://qiita.com/january108/items/54143581ab1f03deefa1 Nachdem ich diesen Artikel gelesen hatte, hatte ich immer noch die Frage, dass ich eine Anfrage gestellt habe, als ich auf die Homepage geklickt habe. Danach recherchierte ich verschiedene Dinge und kam schließlich zur Antwort. Anscheinend habe ich nicht genug über Flash verstanden.

Referenz https://pikawaka.com/rails/flash

Mit anderen Worten, es scheint, dass die Flash-Nachricht angezeigt wird, dann die Anforderung empfangen wird, die Aktion ausgeführt wird und dann die Flash-Nachricht gelöscht wird.

Nachdem die Ansicht mit der Rendermethode angezeigt wurde, schien die Nachricht auch dann bestehen zu bleiben, wenn ich eine Heimanfrage stellte.

Als Test

  1. Geben Sie ungültige Informationen ein und senden Sie
  2. Überprüfen Sie die Fehlermeldung
  3. Gehen Sie zur Startseite
  4. Stellen Sie sicher, dass die Fehlermeldung nicht auf der Startseite verschwindet
  5. Klicken Sie erneut auf die Startseite Dann verschwand die Fehlermeldung.

Es war wirklich erfrischend !!

8.2 Anmelden

Rails-Sitzungshelfer werden ebenfalls automatisch in die Ansicht geladen. Wenn Sie dieses Modul in den Anwendungscontroller laden, der die übergeordnete Klasse aller Rails-Controller ist, können Sie es mit jedem Controller verwenden. (Rails Tutorial Zitiert aus Kapitel 8)

Hinweis Es wird automatisch in der Ansicht geladen. Wenn Sie jedoch die im Helfer festgelegte Methode mit einem Controller usw. verwenden möchten, müssen Sie es mit include laden.

8.2.2 Aktueller Benutzer

Zu diesem Thema ist etwas schwer zu verstehen, daher habe ich die Frage zu Qiita zum ersten Mal verwendet.

Als ich mich eingehender mit dem Inhalt befasste, verstand ich nicht, warum ich die find_by-Methode anstelle der find-Methode hätte verwenden sollen, also stellte ich eine Frage.

Inhalt der Frage https://qiita.com/shun_study_p/questions/da3de50fe7826dc151ed Vielen Dank an diejenigen, die geantwortet haben.


@current_user ||= User.find_by(id: session[:user_id])

Der logische Wert des Benutzerobjekts selbst ist immer wahr. Aus diesem Grund wird der Aufruf find_by nur ausgeführt, wenn @current_user nichts zugewiesen ist und keine unnötigen Lesevorgänge in der Datenbank ausgeführt werden. (Rails Tutorial Zitiert aus Kapitel 8)

Ergänzen Sie den Satz auch hier

@current_user ||= User.find_by(id: session[:user_id])

Dieser Satz dient zum Ausführen der find_by-Methode und zum Erstellen eines Benutzerobjekts, wenn @current_user Null ist. (Benutzerobjekt ist @current_user zugewiesen) Danach wird @current_user zu einem Benutzerobjekt, und da das Benutzerobjekt true zurückgibt, wird die linke Seite danach true, die nutzlose find_by-Methode wird nicht ausgeführt (da @current_user nicht null ist) und nutzlose Datenaufrufe Wird nicht gemacht.

8.2.3 Layout-Link ändern

<%= link_to "Profile", current_user %>

Was wird in diesem Satz als Rückblick getan?

<%= link_to "Profile", "/users/#{current_user.id}" %>
<%= link_to "Profile", user_path(current_user.id) %>
<%= link_to "Profile", user_path(current_user) %>
<%= link_to "Profile", current_user %>

Wird abgekürzt.

Eine andere Frage ist hier Sie können sehen, dass wir das Modellobjekt im Argument link_to übergeben.

Aber diesmal ist es keine Methode ...?

Diesbezüglich habe ich auf den folgenden Artikel verwiesen.

Referenzartikel 1 (auch in Kapitel 7 erwähnt) https://qiita.com/Kawanji01/items/96fff507ed2f75403ecb

Referenzartikel 2 https://teratail.com/questions/198096 Wenn Sie eine Instanz des Modells im Rückgabewert zurückgeben, können Sie sich die Methode anscheinend als Modellobjekt vorstellen.

8.2.4 Layoutänderungen testen

def User.digest(string)
    cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                  BCrypt::Engine.cost
    BCrypt::Password.create(string, cost: cost)
end

Diese Digest-Methode wird in Zukunft in verschiedenen Situationen eingesetzt. In 9.1.1 wird Digest beispielsweise wiederverwendet. Fügen Sie diese Digest-Methode in das Benutzermodell (user.rb) ein. Diese Berechnung muss nicht auf Benutzerbasis durchgeführt werden, sodass Sie nicht auf das Benutzerobjekt zugreifen müssen, z. B. in einer Fixture-Datei (dh Sie müssen es nicht in einer Instanzmethode definieren). (Rails Tutorial Zitiert aus Kapitel 8)


Ich verstehe die Bedeutung des obigen Satzes nicht, vielleicht habe ich den Unterschied zwischen der Instanzmethode und der Klassenmethode nicht verstanden.

Der obige Text ist

  1. Wenn Sie es mit einer Instanzmethode definieren, müssen Sie auf das Benutzerobjekt zugreifen.
  2. Diese "Digest-Methode, die den Hash der übergebenen Zeichenfolge zurückgibt" muss nicht für jede Benutzerinstanz ausgeführt werden. (Was Sie direkt vom Klassenobjekt aus tun können)

Sie sagten. Irgendwie kann ich verstehen, was diese beiden bedeuten ...

Es ist immer noch ein flauschiges Verständnis, aber ich habe versucht, es selbst mit Bezug auf den Artikel zusammenzufassen.

Referenz https://qiita.com/tbpgr/items/56eb65c0ea5882abbb07

Mit anderen Worten Klassenmethoden haben die Aufgabe, Informationen über die XX-Klasse selbst zu ändern und zu referenzieren.

So können Kennwort-Hashing wie dieses Mal, Geschlechtsattribute wie Geschlecht wie im Beispiel des Artikels, diese im Voraus mit der Klassenmethode definiert werden.

Instanzmethoden haben die Aufgabe, Informationen zu einzelnen Instanzen zu ändern und zu referenzieren.

Verwenden Sie daher die Instanzmethode, wenn Sie auf Informationen wie das Kennwort oder den Namen bestimmter Daten verweisen möchten. (Es ist leicht vorstellbar, dass Sie auf das Benutzerobjekt zugreifen müssen.)

Ich frage mich, ob es so ein Ort ist ... schwierig ...

Am Ende

Dieses Kapitel ist ebenfalls schwierig, und es gibt einige Teile, die mit einem Verständnis von etwa 70% Fortschritte gemacht haben. Daher hielt ich es für notwendig, sie erneut zu überprüfen.

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 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
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 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
Rails Tutorial Kapitel 1 Von Null bis Bereitstellung [Try]
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).
Ich habe Rails Anfänger ausprobiert [Kapitel 2]
[Rails] Implementierung der Tutorial-Funktion
Kauen der Schienen Tutorial [Kapitel 1 Von Null bis Bereitstellung] Erste Hälfte