[RUBY] Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 7

Überblick

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

Was ist in diesem Kapitel zu tun?

Da das Benutzermodell im vorherigen Kapitel erstellt wurde, ist die Benutzerregistrierungsfunktion implementiert. Von hier aus implementieren wir eine RESTful-Seite.

Benutzer anzeigen

Erstellen und bearbeiten Sie Themenzweige wie gewohnt. git checkout -b sign-up

Debug- und Rails-Umgebung

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

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.

Übung
  1. Es stellt sich heraus, dass es sich um die Aktion von static_pages handelt. image.png

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

Benutzerressource

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.

Übung

erb:show.html.erb


<%= @user.name %>,<%= @user.email %><br>
<%= @user.created_at %><br>
<%= @user.updated_at %>

image.png

erb:show.html.erb


<%= @user.name %>,<%= @user.email %><br>
<%= Time.now %>

image.png

Debugger-Methode

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.

Übung
  1. Fügen Sie to_yaml an params hinzu.
(byebug) puts params.to_yaml
--- !ruby/object:ActionController::Parameters
parameters: !ruby/hash:ActiveSupport::HashWithIndifferentAccess
  controller: users
  action: show
  id: '1'
permitted: false
nil
  1. Null, da in der Steuerung nichts definiert ist
(byebug) @user
nil

Gravatar Bild und Seitenleiste

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

Es wird ein wenig stilvoll sein.

Übung
  1. Ich mache es, also werde ich es weglassen.

  2. 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
  1. Weisen Sie der Schlüsselwortargumentgröße zu (Standardwert ist 80).
```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

    1. Sie können Daten nicht nur mit HTML-Formular senden.

###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_messagesDie 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. ↓ image.png

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 @userEs 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 @userUm 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 @userAber 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]>
>> 

2.Ergebnis des Versuchs

####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_templatedamit'users/show'Überprüfen Sie, ob die Vorlage angezeigt wird.

Auch in der letzten Zeile diesassert_templateIch 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. image.png Es hat einen Schlüssel(https)→ Kommunikation mit SSL.

2.Wird angezeigt.(Gleich wie Entwicklungsumgebung)

Zum vorherigen Kapitel

Zum nächsten Kapitel

Recommended Posts

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 6. Ausgabe Lernzusammenfassung Kapitel 3
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 8
Rails Tutorial (4. Ausgabe) Memo Kapitel 6
Rails Tutorial Kapitel 3 Lernen
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
Rails Tutorial 4. Ausgabe: Kapitel 1 Von Null bis Bereitstellung
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 0: Vorbereitende Grundkenntnisse 5
[Rails] Lernen mit Rails Tutorial
Rails Tutorial Memorandum (Kapitel 3, 3.1)
[Rails Tutorial Kapitel 4] Ruby mit Rails-Geschmack
[Rails Tutorial Kapitel 5] Erstellen Sie ein Layout
Tutorial zum Kauen der Schienen [Kapitel 2 Spielzeuganwendung]
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
Nur Zusammenfassung zum Einrichten des Rails-Tutorials
Rails Tutorial Test
Rails Tutorial Memorandum 1
Rails Tutorial Kapitel 1 Von Null bis Bereitstellung [Try]
Rails Lerntag 3
Rails Tutorial Memorandum 2
Rails Lerntag 4