[RUBY] Ich habe Rails Anfänger ausprobiert [Kapitel 2]

Kapitel 2 Benutzerregistrierung / Erstellung der Anmeldefunktion


Vorbereitung zur Verwendung von Gerät (Edelstein)

Fügen Sie "gem'devise" zur Gemfile hinzu und führen Sie "bundle install" im Terminal aus Nachdem Sie "Rails g Devise: Install" ausgeführt haben, erstellen Sie ein Benutzermodell mit "Rails G Devise User" Damit wird auch das Routing automatisch erstellt.

Installation des Logout-Links

Teilvorlage anzeigen: Fügen Sie im Hauptteil der App-Ansicht "<% = render'layouts / header"%> "hinzu Teilvorlage erstellen: Erstellen Sie eine Datei _header.html.erb im Layoutordner der Ansicht

Ändern Sie den Link, der beim An- und Abmelden angezeigt wird

Verwenden Sie <%, wenn user_signed_in?%> ← user_signed_in? Ist eine von devise bereitgestellte Methode, sodass Sie sie nicht definieren müssen.


Mail-Authentifizierungsfunktion hinzufügen

Akzeptieren Sie die Registrierung nur für die E-Mail-Adresse der Person

Authentifizierungsfunktion mit Gerät

● Überprüfen Sie die in der Entwicklungsumgebung gesendete E-Mail

routes.rb


if Rails.env.development?
 mount LetterOpenerWeb::Engine, at: "/letter_opener"
end
⚠️ Nach der Implementierung der Mail-Authentifizierungsfunktion ist keine neue Registrierung mehr möglich
スクリーンショット 2020-06-13 18.43.33.png Mir wurde gesagt, dass verify_at nicht gefunden werden konnte Vielleicht liegt es daran, dass Rails db: migrate durchgeführt wurde, ohne die Migrationsdatei beim Erstellen des Benutzermodells zu kommentieren? Ich konnte den Fehler unter Bezugnahme auf [hier](https://teratail.com/questions/140788) beheben. Löschen (löschen) Sie die Datenbank mit "bin / Rails db: drop", konfigurieren Sie sie und migrieren Sie sie erneut
Bearbeiten Sie den Textinhalt der E-Mail und den Text des neuen Registrierungs- / Anmeldebildschirms

Rufen Sie den von devise bereitgestellten Ansichtsordner mit "Rails g Devise: Views" auf


Benutzerdetailseite erstellen

Fügen Sie der Benutzertabelle eine Namensspalte hinzu

● Führen Sie "Rails g Migration AddNameToUsers" aus und fügen Sie "add_column: users,: name,: string" in der def-Änderung der erstellten Migrationsdatei hinzu ● Umschreiben des neuen Registrierungsformulars ● Stellen Sie starke Parameter ein -Erstellen Sie eine Controller-Datei für die neue Benutzerregistrierungsfunktion: Rails g Devise: Controller-Benutzer app / controller / users / registrations_controller.rb wird zum Controller für die neue Registrierung. Kommentieren Sie den Teil zu configure_sign_up_params aus · Schreiben Sie die Routing-Datei neu, um die angepasste Controller-Datei anzuwenden Fügen Sie nach devise_for: users controller: {registrations: 'users / registrations'} hinzu ● Erstellen eines Controllers zur Anzeige der Benutzerdetailseite "Rails g Controller-Benutzer" ● Definieren Sie die Aktion anzeigen, routen, Ansichtsdatei erstellen

⚠️ Ist die Namensspalte auch nach Neuanmeldung leer?

Der Schlüssel des nicht kommentierten Teils des neu registrierten Controllers wurde nicht als Name verwendet. - Die Ursache war ein Rechtschreibfehler in der Stammdatei.


Benutzer mit Fragen verknüpfen

Stellen Sie sicher, dass die Fragentabelle user_id und Spalten enthält ● Erstellen Sie eine Migrationsdatei "Rails g Migration AddUserIDToQuestions" ・ Führe add_reference: question ,: user, Foreign_key: true aus. ➡️ migriere in def change

● Verarbeitung zur Eingabe eines Wertes in user_id

● Modellassoziation (Assoziation) -Has_many: Fragen in der Benutzermodelldatei Durch Hinzufügen von "Gehört zu: Benutzer" zur Fragenmodelldatei können Sie einem Benutzer mehrere Fragen und einem Benutzer einen Fragen zuordnen. ・ Wenn Sie der Fortsetzung von has_many ~ in ↑ depandent: destroy hinzufügen, wird beim Erstellen eines Benutzers auch die erstellte Frage gelöscht.

● Zeigen Sie die Titelliste der erstellten Frage auf der Seite mit den Benutzerdetails an ・ Da ich eine Zuordnung verwende, kann ich die Frage dieses Benutzers unter @ user.questions abrufen.


Erstellen Sie eine Funktion zum Bearbeiten / Löschen von Fragen

● Routing ・ `Get" / question /: id / edit ", to:" Fragen # edit " ・ Patch "/ Fragen /: ID", um: "Fragen # Update" ⭐️ ・ Löschen Sie "/ fragen /: id", um: "Fragen # zerstören"

● Aktionsdefinition und Ansichtserstellung

● Fügen Sie auf der Seite mit den Fragendetails einen Link zur Seite zum Bearbeiten / Löschen ein

● Nur angemeldeten Benutzern erlauben, zu bearbeiten / löschen / fragen Verwenden Sie die Methode devise (authenticate_user!) -Fragen Controller before_action: authenticate_user !, Nur: [: new ,: create, edit, update ,: destroy]

● Lassen Sie nur die Person, die die Frage erstellt hat, bearbeiten / löschen ・ Unter ↑ before_action: sure_correct_user nur: [: edit ,: update ,: destroy] -Definieren Sie sure_correct_user unter privat ◎ Unterschied zwischen find (params [: id]) und find_by (id: params [: id]) Die Verarbeitung, wenn der Wert nicht gefunden wird, ist unterschiedlich [Referenz](https://doruby.jp/users/tn_on_rails/entries/-Rails-find(%3Cid%3E)%E3%81%A8find_by(id--%3Cid) % 3E)% E3% 81% AE% E9% 81% 95% E3% 81% 84) find: erhalte einen Fehler find_by: gibt null zurück

● Bearbeiten / Löschen von Links nur für die Person anzeigen, die die Frage erstellt hat


Was ich gelernt habe

● In der Ansicht rendern zeigt eine Teilvorlage an ● Die link_to-Methode method: gibt den Typ der HTTP-Anforderungsmethode an. Wenn nicht angegeben, wird es erhalten Zeigen Sie eine Warnung an, wenn Sie auf einen Link mit data: {verify:" text "} klicken ● ul tag = ungeordnetes Listen-Tag. Wird für relevante und regelmäßige Dinge verwendet (Navigationsmenüs, Diashows usw.) ● Ruby-Einbettungscode: <% =%>, wenn Sie ihn anzeigen möchten, aber nicht gleich, wenn Sie ihn nicht anzeigen müssen ● Wenn Sie nach einmaliger Ausführung der Migration Änderungen vornehmen möchten, müssen Sie ein Rollback durchführen und anschließend "bin / Rails db: migrate" ändern und ausführen. ● add_reference erstellt die Spalten, die zum Zuordnen der Tabelle erforderlich sind. _Id wird automatisch zum Spaltennamen hinzugefügt Externe Schlüsselbeschränkung (Foreign_key: true): Etwas, das beim Erstellen eines externen Schlüssels sicherer ist ● Assoziation ist bequem ● Routing-Methoden: Patch (teilweise Aktualisierung der Ressourcen) und Löschen ● Automatisches Massenrouting "Ressourcen: Controller-Name" Führen Sie "Schienenrouten" aus und bestätigen Sie sie

Recommended Posts

Ich habe Rails Anfänger ausprobiert [Kapitel 2]
[Rails] Ich habe versucht, die Anwendung zu löschen
Schienen-Tutorial Kapitel 6
Schienen-Tutorial Kapitel 1
Schienen-Tutorial Kapitel 7
Ich habe es mit Spring versucht.
Schienen-Tutorial Kapitel 10
Ich habe versucht, Tomcat zu setzen
Schienen-Tutorial Kapitel 9
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Schienen-Tutorial Kapitel 8
Ich habe FizzBuzz ausprobiert.
[Anfänger] Rails Tutorial
Ich habe JHipster 5.1 ausprobiert
Ich habe versucht, die Sitzung in Rails zu organisieren
[Ruby-Grundlagen] Ich habe versucht, Module zu lernen (Kapitel 1)
[Ich habe es versucht] Spring Tutorial
Kapitel 4 Rails Flavoured Ruby
Ich habe versucht, Autoware auszuführen
Ich habe versucht, Gson zu benutzen
Ich habe sofort QUARKUS ausprobiert
Rails Tutorial Kapitel 3 Lernen
Ich habe versucht, TestNG zu verwenden
Ich habe Spring Batch ausprobiert
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, node-jt400 (Programme)
Ich habe versucht, node-jt400 (ausführen)
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
[Anfänger] Über Rails Session
Ich habe versucht, node-jt400 (Transaktionen)
[Anfänger] Ich bin auf ein Projekt mit Rails6 gestoßen
Rails6 Ich habe versucht, Docker in eine vorhandene Anwendung einzuführen
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
Ich habe Java Gold gestartet (Kapitel 1-1)
Ich habe DI mit Ruby versucht
Ich habe versucht, node-jt400 (IFS schreiben)
[Rails] Ich habe zum ersten Mal versucht, die button_to-Methode zu verwenden
[Rails] Ich habe versucht, eine Mini-App mit FullCalendar zu erstellen
Ich habe versucht, node-jt400 (SQL Update)
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe Spring State Machine ausprobiert
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe versucht, die automatische Bereitstellung mit CircleCI + Capistrano + AWS (EC2) + Rails durchzuführen
[Rails] Ich habe versucht, die Stapelverarbeitung mit der Rake-Task zu implementieren