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.
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.
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
Es war wirklich erfrischend !!
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.
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.
<%= 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.
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
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 ...
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