[RUBY] Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 2

Ü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?

Lernen Sie die leistungsstarken Funktionen von Scaffold durch die Erstellung von toy_app Machen Sie sich ein Bild von der REST-Architektur.

Generiere Toy_app

① Geben Sie die Rails-Version an und generieren Sie sie auf die gleiche Weise wie hello_app

$ cd ~/environment
$ rails _6.0.3_ new toy_app
$ cd toy_app/

② Gemfile ist ebenfalls neu. Schreiben Sie es daher für die Toy App neu

Gemfile


source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',      '6.0.3'
gem 'puma',       '4.3.4'
gem 'sass-rails', '5.1.0'
gem 'webpacker',  '4.0.7'
gem 'turbolinks', '5.2.0'
gem 'jbuilder',   '2.9.1'
gem 'bootsnap',   '1.4.5', require: false

group :development, :test do
  gem 'sqlite3', '1.4.1'
  gem 'byebug',  '11.0.1', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console',           '4.0.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.1.0'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'capybara',           '3.28.0'
  gem 'selenium-webdriver', '3.142.4'
  gem 'webdrivers',         '4.1.2'
end

group :production do
  gem 'pg', '1.1.4'
end

#Tzinfo für Zeitzoneninformationen unter Windows-muss Datenjuwel enthalten
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

③ Und wie zuvor bundle installLauf,

You have requested:
  listen = 3.1.5

The bundle currently has listen locked at 3.2.1.
Try running `bundle update listen`

If you are updating multiple gems in your Gemfile at once,
try passing them all to `bundle update`

Wenn Sie eine solche Fehlermeldung erhalten, bleibt diese in Gemfile.lock stecken. Löschen Sie Gemfile.lock also einmal. bundle updateNach dem Rennen bundle installMachen.

④ Stellen Sie es schließlich unter Git-Versionskontrolle wie hello_app.

$ git init
$ git add -A
$ git commit -m "Initialize repository"

Nachdem Sie ein lokales Repository haben, erstellen Sie ein neues Remote-Repository für Ihre Toy-App. Drücken. (Erstellen Sie ein Remote-Repository auf der Github-Site auf dieselbe Weise wie in Kapitel 1) Das Repository ist noch privat.

$ git remote add origin https://github.com/<Ihr GitHub-Kontoname>/toy_app.git
$ git push -u origin master

⑤ Versuchen Sie vorerst die Bereitstellung. Im aktuellen Zustand gibt es keinen Inhalt, also vorerst genau wie bei hello_app Zur Ausgabe hinzufügen Hallo, Welt

application_controller.rb


class ApplicationController < ActionController::Base

  def hello
    render html: "hello, world!"
  end
end

routes.rb


Rails.application.routes.draw do
  root 'application#hello'
end

Übernehmen Sie diese Änderung und übertragen Sie sie an Github / Heroku

$ git commit -am "Add hello"  
$ heroku create
$ git push && git push heroku master

Erstellen Sie ein Benutzermodell

Benutzermodelldesign

ユーザーのデータモデル Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#sec-modeling_demo_users

Die Attribute id, name und email entsprechen den Spalten der Tabelle.

Micropost-Modelldesign

Microposts sollen kurze Posts mit etwa 140 Zeichen sein, ähnlich wie Twitter-Tweets. Wenn Sie die ID des Beitrags hinzufügen, den Inhalt des Texttyps, in dem der Textinhalt des Beitrags gespeichert ist, und die Benutzer-ID, um aufzuzeichnen, wer ihn veröffentlicht hat

マイクロポストのデータモデル Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#sec-modeling_demo_microposts

Es wird ein solches Datenmodell.

Benutzerressource

Generieren Sie mit dem Gerüstgenerator Schienen aus der Benutzerressource.

$ rails generate scaffold User name:string email:string

Es wird geschrieben, wenn Schienen Gerüstressourcennamen erzeugen Spaltenname: Datentyp ~. Das ID-Attribut wird immer als ein Primärschlüssel zu einem Modell hinzugefügt, sodass es nicht geschrieben werden muss.

Ich habe ein Benutzermodell mit Gerüst erstellt, kann es aber nicht so verwenden, wie es ist. Die vom Generator erstellte Datenbank muss migriert werden.

Migrieren Sie die Datenbank ↓

$ rails db:migrate

Jetzt, da Sie Ihren lokalen Webserver ausführen können, wenn Sie Cloud9 verwenden Bearbeiten Sie development.rb wie in Kapitel 1, um die Verbindung zu Cloud9 zu ermöglichen.

development.rb


Rails.application.configure do
  .
  .
  .
  config.hosts.clear
end

Starten Sie danach das Terminal auf einer anderen Registerkarte und führen Sie `` `Rails Server``` aus. Dadurch wird der lokale Server gestartet und Hallo, Welt! Angezeigt.

Benutzerseiten erkunden

Durch Erstellen der Benutzerressource mit Gerüst in der obigen Reihe von Schritten werden automatisch viele Seiten für die Benutzerverwaltung hinzugefügt. Die URL und der Inhalt der Seite lauten wie folgt.

URL Aktion Verwenden
/users index Seite mit allen Benutzern
/users/1 show id=Seite zur Anzeige von 1 Benutzer
/users/new new Seite, um einen neuen Benutzer zu erstellen
/users/1/edit edit id=Seite zum Bearbeiten von 1 Benutzer

Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#sec-a_user_tour

Informationen zum Erkunden der Benutzerseite finden Sie im Rails-Tutorial.

Übung

  1. Wenn Sie das Entwicklertool des Browsers mit der Taste F12 usw. starten und das entsprechende Teil überprüfen, wird der Inhalt zum Zeitpunkt des erneuten Ladens gelöscht.
  2. Ich kann mich registrieren, auch wenn ich mich ohne Eingabe einer E-Mail registriere. Das ist schlecht, daher wird die aus Kapitel 3 erstellte App auch solche Probleme lösen.
  3. Ich kann mich registrieren, auch wenn ich die falsche E-Mail-Adresse eingebe. Es ist dasselbe wie 2 und dies wird auch eine Gegenmaßnahme sein.
  4. Eine Warnmeldung "Sind Sie sicher?" Wird angezeigt. Wir werden auch Funktionen implementieren, die diesen Benutzern die Verwendung erleichtern sollen.

Verhalten von MVC

Wenn Sie die Indexseite von / users öffnen, wird in MVC wie folgt dargestellt, welche Art der Verarbeitung intern erfolgt. image.png Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#sec-mvc_in_action

Anforderung vom Browser → Vom Router der entsprechenden Aktion zugewiesen → Benutzermodell nach den erforderlichen Daten abfragen → Modell ruft Daten aus der Datenbank ab → Modell übergibt Daten an die Steuerung → Ordnen Sie die empfangenen Daten der Instanzvariablen zu und übergeben Sie sie an die Ansicht. → Die Ansicht generiert HTML und übergibt sie an die Steuerung → Gibt den vom Controller empfangenen HTML-Code an den Browser zurück Der Fluss.

Nachdem die Toy-App vorerst erstellt wurde, versuchen Sie, die Stamm-URL auf die Indexseite der Toy-App zu ändern.

routes.rb


Rails.application.routes.draw do
  resources :users
  # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
  root "users#index"
end

Die Schreibmethode ist auch diesmal dieselbe und wird durch "Controller-Name # Aktionsname" beschrieben.

Werfen wir einen Blick auf den vom Gerüst generierten users_controller.

users_controller.rb


class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]

  # GET /users
  # GET /users.json
  def index
    @users = User.all
  end

  # GET /users/1
  # GET /users/1.json
  def show
  end

  # GET /users/new
  def new
    @user = User.new
  end

  # GET /users/1/edit
  def edit
  end


Eine solche Beschreibung wird gemacht. Die Beschreibung von UsersController <ApplicationController in der ersten Zeile Bedeutet Vererbung in der Ruby-Syntax. Hier Dies bedeutet die UserController-Klasse, die ApplicationController erbt.

In der folgenden Tabelle sind die Aktionen aufgeführt, die REST unterstützen. Einige URLs werden dupliziert, diese werden jedoch als unterschiedliche Routen gezählt, da der HTTP-Anforderungstyp unterschiedlich ist.

HTTP-Anfrage URL Aktion Verwenden
GET /users index Seite mit allen Benutzern
GET /users/1 show id=Seite zur Anzeige von 1 Benutzer
GET /users/new new Seite, um einen neuen Benutzer zu erstellen
POST /users create Aktion zum Erstellen eines Benutzers
GET /users/1/edit edit id=Seite zum Bearbeiten von 1 Benutzer
PATCH /users/1 update id=Aktion zum Aktualisieren von 1 Benutzer
DELETE /users/1 destroy id=Aktion zum Löschen von 1 Benutzer

Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#table-demo_RESTful_users

Betrachten der Indexaktion von users_controller

  def index
    @users = User.all
  end

Es ist so geschrieben. Hierbei werden alle Daten in der Benutzerdatenbank abgerufen und der Variablen @users zugewiesen.

Das Benutzermodell selbst ist sehr einfach und ohne Beschreibung Weil die von der User-Klasse geerbte "ActiveRecord-Klasse" so viele Funktionen hat, die sich auf DB-Operationen beziehen. In diesem Fall konnte User.all Benutzerdaten aus der Datenbank abrufen.

Diese Variable @users wird in der Indexansicht verwendet, die der Indexaktion entspricht. Schauen wir uns den relevanten Ort an.

erb:index.html.erb





<% @users.each do |user| %>
      <tr>
        <td><%= user.name %></td>
        <td><%= user.email %></td>
        <td><%= link_to 'Show', user %></td>
        <td><%= link_to 'Edit', edit_user_path(user) %></td>
        <td><%= link_to 'Destroy', user, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
<% end %>

Von dieser Beschreibung<% @users.each do |user| %>Aber der Teil Um dies zu diesem Zeitpunkt kurz zu erläutern, ziehen Sie die in der Variablen @users enthaltenen Daten (Datensätze) nacheinander heraus. Der Vorgang des Zuweisens zum Benutzer und Wiederholen des von end umgebenen Teils für die Anzahl der Datensätze. Wenn es 3 Benutzer gibt (A, B, C) Geben Sie die Daten von A in user ein und generieren Sie HTML Geben Sie B-Daten in den Benutzer ein und generieren Sie HTML Geben Sie C-Daten in den Benutzer ein und generieren Sie HTML Die iterative Verarbeitung wird durchgeführt. Sie müssen an dieser Stelle nicht verstehen

Übung

① Eine Anfrage wird vom Browser an den Router gesendet (2) Der Router ordnet es der Bearbeitungsaktion des Controllers entsprechend der Anforderung zu. ③ Fordern Sie die für die Bearbeitungsaktion erforderlichen Daten vom Modell an. ④ Das Modell liest die angeforderten Daten aus der Datenbank und gibt sie an die Steuerung zurück. ⑤ Rufen Sie die Ansicht edit.html.erb auf, die der Bearbeitungsaktion entspricht (übergeben Sie zu diesem Zeitpunkt die gelesenen Daten an die Ansicht). ⑥ Die Ansicht generiert HTML und gibt es an den Controller zurück. ⑦ Der Controller gibt den an den Browser übergebenen HTML-Code zurück.

Es wird in der privaten Methode von users_controller beschrieben.

users_controller.rb


class UsersController < ApplicationController
  before_action :set_user, only: [:show, :edit, :update, :destroy]






  private
    # Use callbacks to share common setup or constraints between actions.
    def set_user
      @user = User.find(params[:id])
    end

    # Never trust parameters from the scary internet, only allow the white list through.
    def user_params
      params.require(:user).permit(:name, :email)
    end
end

Die Beschreibung before_action gibt an, dass die set_user-Methode ausgeführt werden soll, bevor die Bearbeitungsaktion ausgeführt wird. In der Aktion ser_user enthält die Variable @user eine Anweisung zum Lesen der Tabelle der angeforderten IDs in der Benutzerdatenbank.

3.edit.html.erb

Informationen zu den Nachteilen der Benutzerressource

Wie bereits in der vorherigen Übung erwähnt, kann ich mich auch dann registrieren, wenn mein Benutzername und meine E-Mail-Adresse falsch sind.

Da es keinen Anmeldemechanismus gibt, kann jeder den Benutzer löschen oder bearbeiten. Es gibt keine Autorität oder Scheiße.

Und es gibt fast keine Tests, um den Betrieb der App zu bestätigen. Ist der obige Inhalt korrekt? Ob die Funktionen der App ordnungsgemäß funktionieren usw. Überhaupt nicht getestet. → Ich kann es nicht finden, auch wenn etwas nicht stimmt

Die Benutzeroberfläche ist hässlich und das Layout ist durcheinander. Niemand verwendet eine Web-App mit einem solchen Layout (Bestätigung).

Schwierig zu verstehen. Erschöpft davon Es ist schwer, den Code vollständig zu verstehen, selbst für mich, der ich eine Woche lang das Rails-Tutorial gelesen habe. Der Code ist grundsätzlich präzise und leicht zu verstehen

Erstellen Sie einen Mikropost

Lassen Sie uns Microposts sowohl mit dem Gerüst als auch mit Benutzern generieren.

$ rails g scaffold Micropost content:text user_id:integer
Running via Spring preloader in process 3794
      invoke  active_record
      create    db/migrate/20200601141608_create_microposts.rb
      create    app/models/micropost.rb
      invoke    test_unit
      create      test/models/micropost_test.rb
      create      test/fixtures/microposts.yml
      invoke  resource_route
       route    resources :microposts
      invoke  scaffold_controller
      create    app/controllers/microposts_controller.rb
      invoke    erb
      create      app/views/microposts
      create      app/views/microposts/index.html.erb
      create      app/views/microposts/edit.html.erb
      create      app/views/microposts/show.html.erb
      create      app/views/microposts/new.html.erb
      create      app/views/microposts/_form.html.erb
      invoke    test_unit
      create      test/controllers/microposts_controller_test.rb
      create      test/system/microposts_test.rb
      invoke    helper
      create      app/helpers/microposts_helper.rb
      invoke      test_unit
      invoke    jbuilder
      create      app/views/microposts/index.json.jbuilder
      create      app/views/microposts/show.json.jbuilder
      create      app/views/microposts/_micropost.json.jbuilder
      invoke  assets
      invoke    scss
      create      app/assets/stylesheets/microposts.scss
      invoke  scss
   identical    app/assets/stylesheets/scaffolds.scss

Migrieren Sie zunächst die Datenbank, damit sie auf die gleiche Weise wie beim Erstellen von Benutzern verwendet werden kann.

$ rails db:migrate
== 20200601141608 CreateMicroposts: migrating =================================
-- create_table(:microposts)
   -> 0.0041s
== 20200601141608 CreateMicroposts: migrated (0.0048s) ========================

Microposts ist derselbe wie bei Users, der Router wurde aktualisiert und die Ressourcen unterstützen jetzt die REST-Architektur. Jedes Routing ist zugewiesen.

HTTP-Anfrage URL Aktion Verwenden
GET /microposts index Seite mit allen Mikroposts
GET /microposts/1 show id=Seite mit 1 Mikropost
GET /microposts/new new Seite, um einen neuen Mikropost zu erstellen
POST /microposts create Aktion zum Erstellen eines neuen Mikroposts
GET /microposts/1/edit edit id=Seite zum Bearbeiten von 1 Mikropost
PATCH /microposts/1 update id=Aktion zum Aktualisieren von 1 Mikropost
DELETE /microposts/1 destroy Löschen Sie den Mikropost mit id1

Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#code-demo_microposts_resource

Der vom Gerüst generierte Code ändert sich nicht, außer dass der Klassenname den Namen ersetzt, den Sie ihm gegeben haben. Das heißt, es hat die gleiche Struktur.

Wie Benutzer können Microposts mit / microposts auf die Indexseite zugreifen und mit New micropost posten.

Übung

  1. Wie bei Benutzern verschwinden die Inhalte.
  2. Dies gilt auch für Benutzer. Da derzeit keine Gegenmaßnahmen ergriffen werden, können leere Benutzer leere Beiträge veröffentlichen.
  3. Ich kann posten, weil der Code zum Begrenzen der Anzahl der Zeichen nicht generiert wurde. (Dies ist auch einer der Nachteile)
  4. Sie können es löschen, indem Sie dem Zerstörungslink auf der Indexseite folgen. Dies wird auch gelöscht, nachdem die Bestätigungsmeldung angezeigt wird.
Mikropfosten zu Mikropfosten

Da es im dritten Punkt der vorherigen Übung keine Zeichenbeschränkung gibt, können sogar lange Sätze gepostet werden, und es wurde ein Nicht-Mikro-Problem entdeckt. Wir werden dieses Problem beheben.

Beheben Sie dieses Problem, indem Sie dem Inhalt der Datenbank Einschränkungen (Validierung) hinzufügen. Der spezifische Code ist unten

micropost.rb


class Micropost < ApplicationRecord
  validates :content, length:{maximum: 140}
  
end

Begrenzen Sie den Inhalt auf 140 Zeichen, indem Sie die Validierung in ein Modell schreiben, das Datenbanken verarbeitet. Dieser Code ist Sehr einfacher Code, der die maximale Länge des Inhalts auf 140 begrenzt. Die maximale Anzahl von Zeichen in einem Beitrag kann in 140 Zeichen umformuliert werden.

Rails gibt jetzt einen Fehler aus, wenn eine Validierung hinzugefügt wird. Hier ist der Bildschirm, auf dem ich Micropost mit 140 Zeichen oder mehr gepostet habe. image.png

Super ausgezeichnet.

Übung

  1. Ich erhalte eine Fehlermeldung wie auf dem obigen Bildschirm und es werden keine Beiträge hinzugefügt, wenn ich zur Indexseite zurückkehre. (Nicht in der Datenbank registriert)
  2. Der Inhalt des Fehlers wird in der ul-Liste in der Klasse error_explanation gespeichert. Wenn die Anzahl der Fehler zunimmt, wird der Inhalt des li-Tags als Fehler hinzugefügt.
Benutzer mit Mikroposts verknüpfen

Wie auf Twitter und Qiita "Ein Benutzer hat mehrere Beiträge" Mit anderen Worten Es können mehrere Beiträge mit Benutzer-ID 1 vorhanden sein. Mit Rails ist es sehr einfach, diese Eins-zu-Viele-Datenbeziehungen zu implementieren. Hier ist der Code

user.rb


class User < ApplicationRecord
  has_many :microposts
end

micropost.rb


class Micropost < ApplicationRecord
  belongs_to :user
  validates :content, length:{maximum: 140}
end

Der Benutzer hat mehrere Mikroposts. Mikroposts gehören einem Benutzer. Diese Beziehung ist in diesem Code implementiert.

Durch Schreiben dieses Codes können Sie den Benutzer anhand des Werts in der Spalte user_id von Microposts anzeigen. Lass es uns tatsächlich versuchen.

Starten Sie zuerst die Konsole `` `Rails Console```, die Rails-Funktionen verwenden kann. Dies ist sehr praktisch, da Sie die Daten und den Code der Datenbank in der Rails-Konsole frei testen können. Erstellen Sie zunächst einen Benutzer in der Rails-Konsole und anschließend einen Micropost mit der ID dieses Benutzers.

user1 = User.first
   (0.4ms)  SELECT sqlite_version(*)
  User Load (0.1ms)  SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT ?  [["LIMIT", 1]]
 => #<User id: 1, name: "takemo", email: "[email protected]", created_at: "2020-05-31 14:00:23", updated_at: "2020-05-31 14:00:23"> 
2.6.3 :002 > user1.microposts

Ersetzen Sie Benutzer1 durch die ersten registrierten Daten in der Benutzerdatenbank Da ich zuvor als Test einen Benutzer auf einem lokalen Server erstellt habe, werden diese Daten zugewiesen.

Hier ist eine Szene, in der die vorherige Zuordnung nützlich ist

> user1.microposts
  Micropost Load (0.1ms)  SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? LIMIT ?  [["user_id", 1], ["LIMIT", 11]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Micropost id: 1, content: "taskemodsjfa jl", user_id: 1, created_at: "2020-06-01 14:24:23", updated_at: "2020-06-01 14:24:23">, #<Micropost id: 3, content: "Ruby ist Yukihiro Matsumoto (allgemein bekannt als):Objektorientiertes Skript von Matz entwickelt)...", user_id: 1, created_at: "2020-06-01 14:27:03", updated_at: "2020-06-01 14:27:03">, #<Micropost id: 5, content: "Das Zuordnen verschiedener Datenmodelle ist eine leistungsstarke Funktion von Rails. Hier mehrere für einen Benutzer...", user_id: 1, created_at: "2020-06-01 14:41:51", updated_at: "2020-06-01 14:41:51">]> 
2.6.3 :003 > 

Da die Zuordnung zu mehreren mit dem Benutzer verknüpften Mikroposts geführt hat, verwenden Sie user1.microposts Sie können alle mit Benutzer1 verknüpften Mikroposts abrufen. (Sie können herausfinden, was der Benutzer gepostet hat.)

Versuchen Sie es in die entgegengesetzte Richtung (finden Sie heraus, wer sich von der Post ergeben hat)

> micropost = user1.microposts.first
  Micropost Load (0.1ms)  SELECT "microposts".* FROM "microposts" WHERE "microposts"."user_id" = ? ORDER BY "microposts"."id" ASC LIMIT ?  [["user_id", 1], ["LIMIT", 1]]
 => #<Micropost id: 1, content: "taskemodsjfa jl", user_id: 1, created_at: "2020-06-01 14:24:23", updated_at: "2020-06-01 14:24:23"> 

Der erste Mikropost von Benutzer1 (Benutzer_ID = 1) wurde der Mikropostvariablen zugewiesen. Mit anderen Worten, es ist nur erforderlich, den Benutzer mit Benutzer-ID 1 aus Micropost zu extrahieren.

> micropost.user
 => #<User id: 1, name: "takemo", email: "[email protected]", created_at: "2020-05-31 14:00:23", updated_at: "2020-05-31 14:00:23"> 
2.6.3 :004 > 

micropost.Ich konnte den Benutzer, zu dem Micropost gehört, abrufen, indem ich ihn als Benutzer festlegte.


 Sie können es bequem verwenden, indem Sie einfach Eins-zu-Viele-Beziehungen mit has_many und entity_to implementieren.

### Übung
 1. Sie können den Inhalt des ersten Mikroposts in den Mikroposts von @ user anzeigen. Wenn Sie also so wie er ist aus einer anderen Zeile kopieren und einfügen, sieht dies folgendermaßen aus.


#### **`erb:show.html.erb`**

<%= notice %>

Name: <%= @user.name %>

Email: <%= @user.email %>

Micropost_first <%= @user.microposts.first.content %>

<%= link_to 'Edit', edit_user_path(@user) %> | <%= link_to 'Back', users_path %>

 ↓ Ergebnis
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/8c6aa29f-73aa-5415-4030-0b0c5f4bd2d8.png)

 2. Nach dem Hinzufügen des Codes, wenn ich ihn tatsächlich leer poste
 Ich wurde in die Validierung verwickelt und warf einen Fehler.
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/e9cff370-73a2-b6e8-16fb-b0b92c94d0db.png)

 3. Geben Sie für FILL_IN die Spalte an, auf die Sie die Validierung anwenden möchten. (Name und E-Mail)


#### **`user.rb`**
```ruby

class User < ApplicationRecord
  has_many :microposts
  validates :name, presence: true
  validates :email, presence: true
end

Seit ich die Validierung hinzugefügt habe, habe ich einen Fehler ausgegeben, als ich mich leer registriert habe. image.png

Informationen zur Rails-Vererbung

Auch wenn Sie hier etwas verstehen, ist es vorerst in Ordnung Das Rails-Modell wird von der Ruby-spezifischen Syntax "User <ApplicationRecord" geerbt. Die Struktur der Modellvererbung ist in der Abbildung dargestellt. image.png

Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#fig-demo_model_inheritance

Alle Rails-Modelle wie User und Micropost erben von der ApplicationRecord-Klasse. Und ApplicationRecord erbt eine Basisklasse namens ActiveRecord :: Base. Dieser aktive Datensatz bietet die Funktion zum Verwalten der Datenbank. Die erste Methode von User.first kann auch verwendet werden, indem dieser ActiveRecord geerbt wird.

Die Steuerung hat eine ähnliche Struktur. image.png Aus Rails Tutorial 6. Ausgabe https://railstutorial.jp/chapters/toy_app?version=6.0#fig-demo_controller_inheritance

Jeder Controller erbt ApplicationController und ApplicationController Durch das Erben der Basisklasse ActionController :: Base Sie können die Grundfunktionen des Controllers gleichermaßen mit verschiedenen Controllern nutzen. Da es ApplicationController erbt, gelten die in ApplicationController definierten Regeln Es wird in jedem geerbten Controller angewendet, und definierte Methoden können auf dieselbe Weise verwendet werden.

Übung

Zeile 1.1

application_controller.rb


class ApplicationController < ActionController::Base
  def hello
    render html:"hello,world!"
  end
end
  1. Die erste Zeile von application_record.rb im Modellordner, in dem die Modelle gespeichert sind

application_record.rb


class ApplicationRecord < ActiveRecord::Base
  self.abstract_class = true
end

Schließlich

Stellen Sie die in diesem Kapitel erstellte Toy-App für Heroku bereit

$ git add -A
$ git commit -m "Finish toy app"
$ git push
$ git push heroku 

Wenn dies unverändert bleibt, tritt auf Heroku ein Fehler auf und die Site wird nicht in der Produktionsumgebung angezeigt. Folgen Sie den Fehlerprotokollen auf Heroku mit Heroku-Protokollen. Dann gibt es eine Zeile wie diese.

2020-06-01T15:52:35.330114+00:00 app[web.1]: [3a72d85c-e21f-41d2-92ce-40c241660d8f]
 ActionView::Template::Error (PG::UndefinedTable: ERROR:  relation "users" does not exist

PG steht für PostgreSQL. Die Bedeutung ist PG und es ist ärgerlich, dass die Benutzertabelle nicht existiert. Weil die Produktionsumgebungsdatenbank und die Entwicklungsumgebungsdatenbank unterschiedlich sind Die Migration muss auch in der Produktionsumgebung erfolgen. Mit anderen Worten, ich bin wütend, weil ich nicht migriert bin.

Migrieren Sie die Produktionsdatenbank mit migrate.


 Dies sollte gut funktionieren.

### Übung
 1. Wenn Sie die vorherige Übung [2.3.3.1] ausführen (https://railstutorial.jp/chapters/toy_app?version=6.0#sec-exercises_demo_user_has_many_microposts), werden keine Mikroposts in der Produktionsumgebungsdatenbank registriert. Nicht durchgeführt
 Da dies einen Fehler auslöst, löschen Sie den in der Übung hinzugefügten Codeteil, schreiben Sie ihn fest und drücken Sie ihn erneut.
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/7443767e-6fa1-5f8f-900b-11470435ede0.png)
 Hoffentlich können Sie einen Benutzer wie diesen erstellen.

<br>


 2. Es wurde bestätigt, dass Mikroposts in derselben Produktionsumgebung erstellt werden können.

 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/3dc7da5e-352e-7a75-58d4-7eb635531558.png)

 3. Natürlich funktioniert es
 ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617753/3df657eb-4246-0451-a2da-a32e358fe741.png)

 [← Zum vorherigen Kapitel](https://qiita.com/take_webengineer/items/35ff3342ce2471e34a43)


 [Zum nächsten Kapitel →](https://qiita.com/take_webengineer/items/ccebe817b40b1152feba)


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
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
Rails 6.0-Routing-Zusammenfassung
Schienen lernen Tag 2