Dieser Artikel vertieft mein Verständnis, indem er einen Kommentarartikel zum Rails-Tutorial schreibt, um mein Wissen weiter zu festigen Es ist Teil meines Studiums. In seltenen Fällen kann es lächerliche oder falsche Inhalte enthalten. Bitte beachten Sie. Ich würde es begrüßen, wenn Sie mir implizit sagen könnten ...
Quelle Rails Tutorial 6. Ausgabe
Da das Benutzermodell im vorherigen Kapitel erstellt wurde, ist die Benutzerregistrierungsfunktion implementiert. Von hier aus implementieren wir eine RESTful-Seite.
Erstellen und bearbeiten Sie Themenzweige wie gewohnt.
git checkout -b sign-up
Lassen Sie die Layoutdatei Debug-Informationen anzeigen.
erb:application.html.erb
<!DOCTYPE html>
<html>
<%= render 'layouts/head' %>
<body>
<%= render 'layouts/header' %>
<div class="container">
<%= yield %>
<%= render 'layouts/footer' %>
<%= debug(params) if Rails.env.development? %>
</div>
</body>
</html>
Rails verfügt jeweils über drei Umgebungen Test: Testumgebung Entwicklung: Entwicklungsumgebung Produktion: Produktionsumgebung In diesem Fall ist das Debuggen in der Produktionsumgebung oder Testumgebung nicht erforderlich. Es ist so eingestellt, dass Debug-Informationen nur in der Entwicklungsumgebung angezeigt werden.
Da ich Debug-Informationen in das Layout eingefügt habe, füge ich auch CSS hinzu.
.debug_dump{
clear: both;
float: left;
width: 100%;
margin-top: 45px;
@include box_sizing;
}
Hier werden die CSS-Regeln geladen, die mit der Mix-In-Funktion von Saas gepackt wurden.
Schauen Sie sich die Debug-Informationen an.
Sie können sehen, dass der Controller und die Aktion geschrieben sind. Diese sind in Parametern enthalten und im Format YAML geschrieben. YAML besteht aus Hashes. Wir werden in der nächsten Übung bestätigen, in welchem Format es geschrieben ist.
Es stellt sich heraus, dass es sich um die Aktion von static_pages handelt.
`` `to_yaml``` und y-Methode haben den gleichen Effekt Konvertiert die Attribute des Benutzerobjekts in YAML.
>> y user.attributes
---
id: 1
name: taketake
email: [email protected]
created_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &1 2020-06-10 12:51:23.959140000 Z
zone: &2 !ruby/object:ActiveSupport::TimeZone
name: Etc/UTC
time: *1
updated_at: !ruby/object:ActiveSupport::TimeWithZone
utc: &3 2020-06-10 13:09:09.579353000 Z
zone: *2
time: *3
password_digest: "$2a$12$xkZDNGfs2Dnjzbm5XxfCfu.sB3I4ug4PFtTHukKdp0EF9YLLsE5Sm"
=> nil
Wenn Sie es nach dem REST-Prinzip implementieren, können Sie Daten erstellen, anzeigen, aktualisieren und löschen. Weisen Sie jeder Aktion grundlegende HTTP-Operationen zu (GET, POST, PATCH, DELETE). Die Seite zur Anzeige von Benutzerinformationen bezieht sich auf Ressourcen mit Attributen, die jeden Benutzer eindeutig identifizieren. Grundlegender Ressourcenname / ID Die Anzeigeseite des Benutzers mit der ID 1 lautet / users / 1. (Fehler, da das Routing zu diesem Zeitpunkt nicht definiert ist.)
Fügen Sie route.rb die folgende Zeile hinzu, um das Routing zu aktivieren.
users
In dieser einen Zeile erhalten Sie Zugriff auf die grundlegenden Aktionen, die Sie für RESTful Users-Ressourcen benötigen.
|HTTP-Anfrage|URL|Aktion|Benannte Route|Verwenden|
|:--|:--|:--|:--|:----------------|
|GET|/users|index|users_path|Listenseite aller Benutzer|
|GET|/users/1|show|user_path(user)|Seite mit einem bestimmten Benutzer|
|GET|/usres/new|new|new_user_path|Neue Benutzerseite|
|POST|/users|create|users_path|Aktion zum Erstellen eines Benutzers|
|GET|/users/1/edit|edit|edit_users_path|id=Seite zum Bearbeiten von 1 Benutzer|
|PATCH|/users/1|update|user_path(user)|Aktion zum Aktualisieren des Benutzers|
|DELETE|/users/1|destroy|user_path|Aktion zum Löschen des Benutzers|
Aus Rails Tutorial 6. Ausgabe
https://railstutorial.jp/chapters/sign_up?version=6.0#table-RESTful_users
Da wir das Routing implementiert haben, funktioniert es, wenn Sie eine Seite und eine Aktion zum Anzeigen erstellen.
Erstellen Sie sofort eine Vorlage für die Benutzeranzeigeseite (Show-Seite).
Da wir keinen Generator verwenden, erstellen Sie show.html.erb manuell in app / views / users.
#### **`erb:show.html.erb`**
<%= @user.name %>,<%= @user.email %>
Die Variable @user wird hier verwendet, kann jedoch nicht verwendet werden, da sie nicht definiert ist.
Daher kann es verwendet werden, indem die Variable @user in der Aktion show des Controllers Users definiert wird.
```rb
def show
@user = User.find(params[:id])
end
Der Zeichentyp "1" wird in params [: id] gespeichert, aber automatisch in den Integer-Typ konvertiert, wenn er im Argument der find-Methode angegeben wird. Der 1 Teil von / users / 1 der URL wird in params [: id] gespeichert.
erb:show.html.erb
<%= @user.name %>,<%= @user.email %><br>
<%= @user.created_at %><br>
<%= @user.updated_at %>
erb:show.html.erb
<%= @user.name %>,<%= @user.email %><br>
<%= Time.now %>
Ich konnte den Status der Anwendung mithilfe der Debug-Methode überprüfen. Versuchen Sie das Debuggen auch mit der Debugger-Methode.
Wenn Sie den Debugger anschließen, können Sie den Status von Variablen usw. überprüfen, wenn der Debugger gelesen wird. Sehr nützlich zum Debuggen. Wenn bei der zukünftigen Anwendungsentwicklung ein nicht identifizierter Fehler auftritt, fügen Sie einen Debugger ein und schauen Sie genauer hin. Möglicherweise kennen Sie die Fehlerursache.
(byebug) puts params.to_yaml
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
controller: users
action: show
id: '1'
permitted: false
nil
(byebug) @user
nil
Wenn Sie einen Dienst namens Gravatar verwenden, um ein Bild einer E-Mail-Adresse zuzuordnen, können Sie einfach den Gravatar-Bildpfad konfigurieren. Eine ausgezeichnete, die automatisch in Gravatar registrierte Bilder registriert.
Definieren Sie die gravatar_for-Methode. gravatar_for ist eine Hilfsmethode, die eine Bilddatei zurückgibt, wenn Sie ein Benutzerobjekt übergeben
def gravatar_for(user)
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
Beachten Sie, dass der letzte image_tag wie im Beispiel ein impliziter Rückgabewert ist.
Ändern Sie die E-Mail-Adresse des Benutzers in die E-Mail-Adresse, die dem Bild mit Gravatar zugeordnet ist.
>> User.first.update_attribute(:email,"[email protected]")
(0.4ms) SELECT sqlite_version(*)
User Load (0.1ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ? [["LIMIT", 1]]
(0.1ms) begin transaction
User Update (9.9ms) UPDATE "users" SET "email" = ?, "updated_at" = ? WHERE "users"."id" = ? [["email", "[email protected]"], ["updated_at", "2020-06-11 12:21:07.548685"], ["id", 1]]
(3.1ms) commit transaction
=> true
Bearbeiten Sie show.html.erb und custom.scss, um dem Modell näher zu kommen.
Es wird ein wenig stilvoll sein.
Ich mache es, also werde ich es weglassen.
Weisen Sie der Option Hash-Größe zu (Standardwert ist 80).
def gravatar_for(user,options={ size: 80})
size = options[:size]
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
```rb
def gravatar_for(user,size: 80)
gravatar_id = Digest::MD5::hexdigest(user.email.downcase)
gravatar_url = "https://secure.gravatar.com/avatar/#{gravatar_id}?s=#{size}"
image_tag(gravatar_url, alt: user.name, class:"gravatar")
end
Option Hash Optionsname={Hash}の形式で指定する。ただし入れ子になったHashなので size = options[:size]Andernfalls kann es nicht als Größe verwendet werden. Wenn Sie es als Schlüsselwortvariable angeben, können Sie den Standardwert angeben. Wenn der Standardwert angegeben wird, Praktisch, dass Sie das Argument weglassen können Sie können es wie eine benutzerfreundliche Version des Options-Hash verwenden.
###Benutzerregistrierungsformular Erstellen Sie ein Benutzerregistrierungsformular, da die Benutzerprofilseite vorerst ausgefüllt wurde.
####form_Benutzen mit form_with nimmt ActiveRecord-Objekte auf und erstellt ein Formular mit diesen Attributen. Vom Benutzer erstellte Seite/Anmeldung ist Benutzer#Weil es an Neues gebunden ist Form zu neuer Aktion_Definieren Sie das Benutzerobjekt, das von mit benötigt wird.
@user = User.new
Erstellen Sie auch Form erb und scss.
#####Übung
1.
```erb
<div class="row">
<div class="col-md-6 col-md-offset-3">
<%= form_with(model: @user, local: true) do |foobar| %>
<%= foobar.label :name %>
<%= foobar.text_field :name %>
<%= foobar.label :email %>
<%= foobar.email_field :email %>
<%= foobar.label :password %>
<%= foobar.password_field :password %>
<%= foobar.label :password_confirmation, "Confirmation" %>
<%= foobar.password_field :password_confirmation %>
<%= foobar.submit "Create my account", class: "btn btn-primary" %>
<% end %>
</div>
</div>
Es funktioniert immer noch, aber Da f als Abkürzung für form verwendet wird, ist es nicht gut, bedeutungslose und irrelevante Zeichenketten wie foobar zu verwenden.
####Form HTML Fassen Sie die Punkte kurz zusammen.
· Lokal:Wenn true die Standardeinstellung ist, senden Sie mit Ajax. Option zum Abbrechen der Übertragung durch Ajax.
・ Das f-Objekt ist für die Methode, die dem HTML-Formularelement entspricht.@Gibt HTML zum Festlegen von Benutzerattributen zurück.
· Bilden_Wenn Sie den von mit generierten HTML-Code überprüfen möchten, überprüfen Sie die Quelle mit einem Browser. Windows-Benutzer können mit der Taste F12 surfen.
・ Wenn Sie den Typ für Text, E-Mail-Adresse und Kennwort angeben, werden die Zeichen ausgeblendet, wenn es sich um ein Kennwort oder eine E-Mail-Adresse handelt Es gibt Unterschiede wie die Tastatur zur Eingabe einer E-Mail-Adresse, die auf einem Smartphone angezeigt wird, oder dergleichen.
-Hash wird mit dem Wert des Namensattributs des Eingabe-Tags initialisiert(params)Konfigurieren.
· Bilden_zu mit@Wenn ein Benutzer angegeben wird, wird der Prozess aufgeteilt, je nachdem, ob es sich um einen neuen oder einen vorhandenen Benutzer handelt. Diesmal@Benutzer ist ein neues Benutzerobjekt, das Sie gerade erstellt haben, um ein neues Objekt zu erstellen Da die POST-Anforderung gesendet wird, ist das Methodenattribut des Formular-Tags auch POST.
· Bilden_Wenn ein Formular mit mit generiert wird, wird automatisch HTML mit dem Namen CSRF generiert, um Angriffe zu verhindern.
#####Übung
###Fehler bei der Benutzerregistrierung Erstellen Sie ein Formular, das einen Fehler zurückgibt und Sie zur erneuten Eingabe auffordert, wenn Sie ungültige Daten senden.
####Richtige Form Der auf der neuen Aktionsformularseite eingegebene Inhalt wird an die Erstellungsaktion gesendet. Der Verarbeitungsablauf ist Die Anmeldeseite füllt das Formular aus. ↓ Daten werden an die Erstellungsaktion gesendet. ↓ Benutzer in der Erstellungsaktion.Erstellen Sie ein Benutzerobjekt mit new ↓ Speichern Sie das erstellte Benutzerobjekt → Legen Sie fest, dass die Anmeldeseite erneut angezeigt wird, wenn dies fehlschlägt.
Es gibt eine solche Beschreibung in der Erstellungsaktion.
user])
In dieser Zeile befinden sich die auf der Formularseite eingegebenen Daten im Parameter-Hash:Durch Übergabe des Benutzersymbols
Kann ersetzt werden.
#### **`user])`**
```@user = user.new(params[
Dieser Code funktioniert auf älteren Rails, aber die neuen Rails weisen eine Sicherheitsanfälligkeit für Massenzuweisungen auf
Ein Fehler wird auftreten.
Als Gegenmaßnahme verwenden wir sogenannte starke Parameter.
####Strong Parameters
In dem Code, den ich früher geschrieben habe
#### **`user])`**
```@user = user.new(params[
Es gab eine Linie.
Diese Zeile ist eine sehr gefährliche Implementierung für die Sicherheit und wirft seit Rails 4 Fehler aus
Was ist gefährlich?
admin=In der Post-Anfrage ist ein Attribut enthalten, das vom Benutzer nicht bearbeitet werden darf, z. B. 1.
Nur weil der Inhalt der Datenbank überschrieben wird.
Mit StrongParameter können Sie die erforderlichen und die zulässigen Parameter angeben.
Dadurch kann der Inhalt der Datenbank sicher aktualisiert werden.
Benutzer in einer externen Methode, um die Verwendung dieses StrongParameters zu vereinfachen_Es ist üblich, Parameter zu definieren.
Darüber hinaus muss diese Methode nicht von externen Benutzern verwendet werden. Schreiben Sie sie daher privat. Dadurch wird verhindert, dass diese Methode extern verwendet wird.
```rb
private
def user_params
params.require(:user).permit(:name,:email,:password,:password_confirmation)
end
Wenn Sie diese Methode definieren und als StrongParameter übergeben, tritt der Fehler vorerst nicht auf. Es gibt keine Rückmeldung, da wir die Verarbeitung für eine erfolgreiche und erfolglose Datenspeicherung noch nicht implementiert haben. Wir werden diese von nun an umsetzen.
#####Übung 1.
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
admin: '1'
controller: users
action: new
permitted: false
####Fehlermeldung Implementieren Sie die Fehlermeldung, wenn die Benutzerregistrierung fehlschlägt.
Das Objekt, das bei der Überprüfung erfasst wurdeerrors.full_messages
Die Fehlermeldung wird als Array in gespeichert.
>> user.save
(0.1ms) begin transaction
User Exists? (0.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" IS NULL LIMIT ? [["LIMIT", 1]]
(0.1ms) rollback transaction
=> false
>> user.errors.full_messages
=> ["Password can't be blank", "Password can't be blank", "Password is too short (minimum is 6 characters)", "Name can't be blank", "Email can't be blank", "Email is invalid"]
Neue Seite mit dieser Fehlermeldung(Anmeldeseite)Mit dem Bootstrap-Formular auf einmal ausgeben-Durch Hinzufügen der Kontrollklasse Eine solche Fehleranzeige ist abgeschlossen
erb:_error.messages.erb.html
<% if @user.errors.any? %>
<div id="error_explanation" >
<div class="alert alert-danger">
The form contains <%= pluralize(@user.errors.count, "error") %>.
</div>
<ul>
<% @user.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
↑ Neu erstellter Fehler_Nachrichten teilweise
pluralize(@user.errors.count,"error")
[email protected]ählung(2 oder mehr)Im Fall von eine bequeme Methode, die Fehler und Pluralformen automatisch korrigiert.
#### **`if @user.errors.any?`**
das [email protected], wenn mindestens ein Fehler vorliegt. empty?Hat den gegenteiligen Effekt von.
#####Übung 1.Sie können sehen, dass sich die Fehleranweisung entsprechend ändert, wenn Sie die Validierung neu schreiben. ↓
2.Neue Seite(neue Seite)Senden Sie das Formular mit, um zum Erstellen zu springen. Weil create angibt, dass eine neue Aktion mit Render gezeichnet werden soll, wenn das Speichern von Daten fehlschlägt. Die URL ist die der Erstellungsseite.
#####Test auf Fehler
Schreiben Sie einen Integrationstest für eine Reihe neuer Benutzerregistrierungsvorgänge.
rails g integration_test users_signup
users_signup_test.rb
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'
end
end
assert_no_difference 'User.count' do
Argumente vor und nach der Verarbeitung im Block mit(User.count)Überprüfen Sie, ob der Wert von unverändert ist.
#### **`{~`**
```post users_path,params {user
In den Aktionsparametern erstellen[:user]Der Wert der(Formulareingabewert)Wird gesendet.
#####Übung
1.Wenn Sie die Vorlage füllen, sieht es so aus
```rb
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#error_explanation'
assert_select 'div.field_with_errors'
end
CSS-Warnung, wenn Sie weitere Details hinzufügen möchten-Sie können Gefahr usw. testen.
assert_select 'div.alert-danger'
####Ausfüllen des Anmeldeformulars
Zu diesem Zeitpunkt können ungültige Daten verarbeitet werden, gültige Daten jedoch nicht.
Wenn ich gültige Daten eingebe und sende, friert sie ein.
No template found for UsersController#create, rendering head :no_content Completed 204 No Content in 348ms (ActiveRecord: 8.5ms | Allocations: 6337)
Dies liegt daran, dass die Erstellungsaktion keine gültige Ansicht hat.
Weil die Aktion die entsprechende Ansicht lädt, wenn der Prozess abgeschlossen ist
Wenn die Daten gültig sind```if @user.save```Weil es wahr wird und die Verarbeitung der Aktion so endet, wie sie ist
Lesen Sie die Erstellungsansicht. Ein Fehler tritt auf, weil die Erstellungsansicht nicht erstellt wurde.
Diesmal erstellt die Aktion "Erstellen" jedoch einen neuen Benutzer(In Datenbank speichern)Ich hoffe, ich kann es schaffen, also mache ich keine Ansicht
Wechseln Sie nach dem Speichern des Benutzers zur Profilseite des erstellten Benutzers.
```rb
def create
@user = User.new(user_params)
if @User
redirect_to @user ## redirect_to ist eine Methode, die zur angegebenen Seite umleitet
else
render 'new'
end
end
Hierredirect_to @user
Es gibt eine Linie
Dies,Sinnloser Punkt!!
Wenn Sie es hier nicht verstehen, wird es fortgesetzt????Wegen des Zustands
Punkte Ich möchte, dass Sie Ihr Bestes geben, um zu verstehen...
redirect_to @user
Um genau zu seinredirect_to user_path(@user)
Wird sein.
Wenn Sie ein Objekt für die Benutzerressource übergeben, wird dieser Benutzer profiliert(Einzelne Seite)Will sehen
Weil Rails für Sie raten wirdredirect_to @user
Aber es funktioniert.
Es ist eine Funktion für Effizienz, aber wir Anfänger sollten es vergeben, weil es zu Verstopfungen führt.
Es ist bequem, sich daran zu erinnern, also lasst es uns gut verstehen.
#####Übung 1.
>> User.create(name:"Anpanman",email:"[email protected]",password:"foobar",password_confirmation:"foobar")
(1.4ms) SELECT sqlite_version(*)
(0.1ms) begin transaction
User Exists? (0.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "[email protected]"], ["LIMIT", 1]]
User Create (3.9ms) INSERT INTO "users" ("name", "email", "created_at", "updated_at", "password_digest") VALUES (?, ?, ?, ?, ?) [["name", "Anpanman"], ["email", "[email protected]"], ["created_at", "2020-06-13 14:33:31.718157"], ["updated_at", "2020-06-13 14:33:31.718157"], ["password_digest", "$2a$12$WJ1/TrXoJLq.c3Q9KetVq.h4VmV6cTkrGf92wzQcpigckRj1ZCKPm"]]
(18.0ms) commit transaction
=> #<User id: 4, name: "Anpanman", email: "[email protected]", created_at: "2020-06-13 14:33:31", updated_at: "2020-06-13 14:33:31", password_digest: [FILTERED]>
def create
@user = User.new(user_params)
if @user.save
redirect_to user_url(@user)
else
render 'new'
end
end
Das funktioniert immer noch genauso.
####flash Wenn Sie einen Benutzer erstellt haben, wurde "Der Benutzer wurde erstellt".!"Und Nach dem Löschen wird es für kurze Zeit angezeigt, bis Sie die Seite verlassen, z. B. "Gelöscht". Statusmeldung anzeigen. Dies ist auch die Nachricht, dass der Beitrag erfolgreich war.
Wenn Sie eine temporäre Nachricht erstellen möchten, die nur auf derselben Seite wie dieser in Rails angezeigt wird Verwenden Sie eine spezielle Variable namens Flash.
def create
@user = User.new(user_params)
if @user.save
flash[:success] = "Welcome to the Sample App!"
redirect_to user_url(@user)
else
render 'new'
end
end
flash[:success]Speichern Sie die Nachricht, wenn die Benutzererstellung in erfolgreich ist. Auf diese Weise kann die Nachricht am Umleitungsziel nur einmal angezeigt werden.
Danach nur, wenn die dem Flash zugewiesene Nachricht in das Layout aufgenommen wurde und Flash vorhanden ist Gibt an, dass der Blitz angezeigt werden soll.
<% flash.each do |message_type,message| %>
<div class="alert alert-<%=message_type %>"><%= message %></div>
<% end %>
#####Übung 1.Wenn Sie ein Symbol in die Ausdruckserweiterung der Zeichenfolge einfügen:Wird zurückgegeben
>> "#{:success}"
=> "success"
2.Ich habe das Gefühl, dass die Antwort herausgekommen ist, auch wenn ich gebeten wurde, darüber nachzudenken, aber es wird erklärt. :mit dem Erfolgsschlüssel:Der Gefahrenschlüssel ist ein Symbol Wenn der Ausdruckserweiterung einer Zeichenfolge ein Symbol zugewiesen wird, wird die Ausgabe ohne: ausgegeben.
>> flash = { success: "It worked!", danger: "It failed." }
=> {:success=>"It worked!", :danger=>"It failed."}
>> flash.each do |key, value|
?> puts "#{key}"
>> puts "#{value}"
>> end
success
It worked!
danger
It failed.
=> {:success=>"It worked!", :danger=>"It failed."}
####Tatsächliche Benutzerregistrierung Der Inhalt der Datenbank ist möglicherweise fehlerhaft. Versuchen Sie daher, sie vorerst zurückzusetzen.
rails db:migrate:reset
Wenn Sie nach dem Zurücksetzen einen neuen Benutzer im Formular erstellen
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/105342b5-6c00-ffa8-c370-b1ce3161b0cc.png)
Die Flash-Begrüßungsnachricht ist grün(alert-Erfolgsklasse)Wird angezeigt und der Benutzer wird erstellt.
Diese Begrüßungsnachricht verschwindet, wenn die Seite neu geladen wird.
#####Übung
1.
```irb
>> User.find_by(email:"[email protected]")
(0.4ms) SELECT sqlite_version(*)
User Load (1.2ms) SELECT "users".* FROM "users" WHERE "users"."email" = ? LIMIT ? [["email", "[email protected]"], ["LIMIT", 1]]
=> #<User id: 1, name: "take", email: "[email protected]", created_at: "2020-06-14 02:57:10", updated_at: "2020-06-14 02:57:10", password_digest: [FILTERED]>
>>
####Test auf Erfolg Ich habe den Test geschrieben, als er fehlgeschlagen ist. Als nächstes werde ich den Test schreiben, wenn er erfolgreich ist.
test "valid signup information" do
get signup_path
assert_difference 'User.count', 1 do
post users_path, params:{user:{name:"sample",
email:"[email protected]",
password:"foobar",
password_confirmation:"foobar"}}
end
follow_redirect!
assert_template 'users/show'
end
assert_Im Unterschied wird getestet, dass sich das erste Argument durch das zweite Argument vor und nach der Verarbeitung im Block ändert.
Senden Sie also gültige vom Benutzer erstellte Informationen an die Erstellungsseite, um zu testen, ob der Benutzer tatsächlich erstellt wurde.
follow_redirect!
Ist eine Methode zum Verschieben zum Umleitungsziel.
Diese Methode führt Sie zur Show-Seite des Benutzers, den Sie zu diesem Zeitpunkt erstellt haben
assert_template
damit'users/show'Überprüfen Sie, ob die Vorlage angezeigt wird.
Auch in der letzten Zeile diesassert_template
Ich teste die Show-Seite insgesamt, indem ich laufe.
Mit anderen Worten, selbst wenn ein Fehler auf der Show-Seite auftritt oder nicht richtig angezeigt wird, wird er als Fehler angezeigt.
Diese eine Zeile bestätigt die wichtigen Funktionen.
#####Übung 1.Texttests können leicht unterbrochen werden, wenn der Text falsch ist oder wenn Sie den Text selbst ändern Dieses Mal werde ich testen, ob es eine Aussage in Flash gibt.
assert_not flash.empty?
2.```<%= content_tag(:div,message,class:"alert alert-#{message_type}") %>```
In dieser Zeile ist das Element das erste Argument(div Element)Geben Sie den Inhalt des Elements mit dem zweiten Argument an(Textinhalt)Angeben,
Geben Sie im dritten Argument die Klasse an. Auf diese Weise ist es leicht zu verstehen und präzise, da es nur mit erb geschrieben werden kann.
3.Es gibt kein Umleitungsziel(unbestimmt)Wütend werden.
RuntimeError: RuntimeError: not a redirect! 204 No Content test/integration/users_signup_test.rb:26:in `block in class:UsersSignupTest'
4.Für den Test, dass ein weiterer Benutzer gesendet wird, wenn gültige Benutzerinformationen gesendet werden
Da die Erstellungsaktion in false umgeschrieben wurde, wird die Zeile, die den Benutzer erstellt, nicht ausgeführt, auch nicht im Test
#### **`"User.count" didn't change by 1.→User.Ich werde wütend, dass sich die Anzahl nicht geändert hat.`**
FAIL["test_valid_signup_information", #<Minitest::Reporters::Suite:0x0000559122566bd0 @name="UsersSignupTest">, 1.1665384099906078]
test_valid_signup_information#UsersSignupTest (1.17s)
"User.count" didn't change by 1.
Expected: 1
Actual: 0
test/integration/users_signup_test.rb:20:in `block in <class:UsersSignupTest>'
###Professionelle Bereitstellung Mit der Implementierung dieses Kapitels können Sie Benutzer erstellen und in der Datenbank speichern. Fügen Sie Einstellungen für die sichere Benutzerregistrierung hinzu. Zuerst Commit und Push Git wie gewohnt.
####SSL in der Produktionsumgebung Wenn Sie tatsächlich einen Benutzer in der Produktionsumgebung erstellen, fließen die im Netzwerk eingegebenen Daten, wenn sie jedoch nicht verschlüsselt sind Informationen, die nicht durchgesickert sein sollten, wie Passwörter und E-Mail-Adressen, können problemlos erfasst werden. Um dies in der Produktionsumgebung durch Verschlüsselung mit SSL zu verhindern Erhöhen Sie die Sicherheit nachfolgender Websites.
Sie können sicher mit https kommunizieren, indem Sie den Browser zur Verwendung von SSL zwingen.
config.force_ssl = true
production.Aktivieren Sie einfach diese auskommentierte Zeile in rb und Sie sind fertig.
Sie müssen lediglich SSL auf Ihrem Server einrichten
Wenn Sie eine eigene Domain haben, müssen Sie ein SSL-Zertifikat erwerben und einrichten
Huckepack auf Herokus SSL(herokuapp.com)Sie können problemlos SSL verwenden
####Webserver für die Produktionsumgebung
Der Webserver für die Produktionsumgebung ist standardmäßig WEBrick, ist jedoch anfällig für eine Zunahme des Datenverkehrs.
Wechseln Sie zu einem Puma-Server, der stark gegen viel Verkehr ist.
Seit Rails 5 und höher kann Puma standardmäßig verwendet werden.
Sie müssen lediglich eine Konfigurationsdatei erstellen, um Puma auszuführen.
#### **`database.yml`**
```yml
SQLite. Versions 3.8.0 and up are supported.
gem install sqlite3
Ensure the SQLite 3 gem is defined in your Gemfile
gem 'sqlite3'
default: &default
adapter: sqlite3
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
timeout: 5000
development:
<<: *default
database: db/development.sqlite3
Warning: The database defined as "test" will be erased and
re-generated from your development database when you run "rake".
Do not set this db to the same as development or production.
test:
<<: *default
database: db/test.sqlite3
production:
adapter: postgresql
encoding: unicode
# For details on connection pooling, see Rails configuration guide
# https://railsguides.jp/configuring.html #Pool-Datenbankverbindungen
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
database: sample_app_production
username: sample_app
password: <%= ENV['SAMPLE_APP_DATABASE_PASSWORD'] %>
Herokus offizielles Dokument enthält auch verschiedene Informationen zu dieser Zeit, daher werde ich einen Link als Referenz einfügen Heroku offizielle Dokumentation(Rails)
#####Übung 1. Es hat einen Schlüssel(https)→ Kommunikation mit SSL.
2.Wird angezeigt.(Gleich wie Entwicklungsumgebung)
Recommended Posts