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
Lernen Sie die leistungsstarken Funktionen von Scaffold durch die Erstellung von toy_app Machen Sie sich ein Bild von der REST-Architektur.
① 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 install
Lauf,
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 update
Nach dem Rennen
bundle install
Machen.
④ 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
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.
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.
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.
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.
Wenn Sie die Indexseite von / users öffnen, wird in MVC wie folgt dargestellt, welche Art der Verarbeitung intern erfolgt. 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
① 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
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
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.
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.
Super ausgezeichnet.
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.
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.
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. 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.
Zeile 1.1
application_controller.rb
class ApplicationController < ActionController::Base
def hello
render html:"hello,world!"
end
end
application_record.rb
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
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