[RUBY] Schienen lernen Tag 2

Ruby on Rails 5 Schnelllernhandbuch Kapitel 4

4-2-1 Datentyp

Jede Spalte in der Datenbank benötigt einen Datentyp. Ein Datentyp gibt die darin enthaltenen Werte unter bestimmten Bedingungen an.

Datentyp Erläuterung
:boolean Boolescher Wert
:integer Ganzzahl mit Vorzeichen
:float Gleitkommazahl
:string Zeichenkette (kurz)
:text Zeichenkette (lang)
:date Datum
:datetime Datum (und Uhrzeit

Unterscheiden Sie die darin enthaltenen Daten, indem Sie jeder Spalte den obigen Datentyp hinzufügen

4-2-2 NOT NULL-Einschränkung

Wenn die Spalte keinen Wert hat, wird der Wert als NULL festgelegt und als Tabelle gespeichert. Mit NOT NULL kann jedoch angegeben werden, dass die Spalte immer einen Wert enthält.

・ So wenden Sie die NOT NULL-Einschränkung an Es gibt zwei Möglichkeiten, die NOT NULL-Einschränkung anzuwenden. Die erste besteht darin, beim Erstellen einer Tabelle Einschränkungen festzulegen. Die zweite Methode besteht darin, eine Einschränkung hinzuzufügen, wenn Sie nach dem Erstellen der Tabelle eine Einschränkung hinzufügen möchten.

  1. So legen Sie beim Erstellen einer Tabelle Einschränkungen fest So erstellen Sie eine Tabelle mit db: migrieren Sie, nachdem Sie die NOT NULL-Einschränkung auf die Migrationsdatei angewendet haben, um die Tabelle so zu erstellen, wie sie ist

db/migrate/XXXXXXXXXX_create_tasks.rb


class CreateTasks < ActionRecord::Migration[5.2]
 def change
  create_table :tasks do |t|
   t.string :name, null: false
   t.text :description
...

Da es ein Problem ist, wenn der Namensteil keinen Wert enthält, fügen Sie nach dem Namen null hinzu. Fügen Sie danach true hinzu, wenn null (leer) akzeptabel ist, und false, wenn Sie blank (NOT NULL) nicht mögen.

  1. Hinzufügen von Einschränkungen, wenn Sie nach dem Erstellen einer Tabelle Einschränkungen hinzufügen möchten
$ bin/rails g migration ChangeTaskNameNotNull

Da die Tabelle bereits erstellt wurde, macht es keinen Sinn, die Migrationsdatei zu ändern. Erstellen Sie also eine Migrationsdatei für Änderungen und schreiben Sie dort den Code für Änderungen

db/migrate/XXXXXXXXXXXX_change_tasks_name_not_null.rb


class ChangeTaskNameNotNull < ActionRecord::Migration[5.2]
 def change
  change_column_null :tasks, :name, false
 end
end

Ändern Sie die Aufgabe mit change_column_null (Spalte in null ändern) in der erstellten Migrationsdatei zur Änderung. change_column_null: Aufgabenname,: Spaltenname,: wahr oder falsch (wahr ist null, falsch ist nicht null),

Geben Sie die Länge der Zeichenkettenspalte an (Änderungsmethode und Aufwärtsmethode Abwärtsmethode).

Um die Länge der Zeichenfolge anzugeben, fügen Sie entweder Informationen zur Migrationsdatei zum Erstellen der Tabelle hinzu oder erstellen Sie eine Migrationsdatei zum Hinzufügen von Informationen zur Tabelle, für die die Informationen festgelegt wurden, wie oben erläutert. Ist. Lassen Sie uns dieses Mal sehen, wie Sie eine Migrationsdatei zum Hinzufügen von Informationen zu einer Tabelle erstellen, deren Informationen festgelegt wurden.

class ChangeTasksNameLimit30 < ActionRecord::Migration[5.2]
 def up
  change_column :tasks, :name, :string, :limit: 30
 end
 def down
  change_column :tasks, name, :string
 end
end

Achten Sie diesmal auf die Stelle, an der die Aufwärtsmethode und die Abwärtsmethode anstelle der Änderungsmethode geschrieben werden. Ursprünglich ist die Änderungsmethode eine Methode, die durch Kombinieren der obigen Aufwärtsmethode und der Abwärtsmethode erstellt wurde. Der Grund, warum die Änderungsmethode dieses Mal in zwei Teile geteilt wird, liegt in [change_column]. Wenn Sie change_column in der Änderungsmethode verwenden, können Sie es nicht rückgängig machen, wenn etwas schief geht. Führen Sie beim Zurückgeben der Version den umgekehrten Vorgang aus, um die Version zurückzugeben, während Sie sich die aktualisierte Version ansehen (up oder change). Das funktioniert aber nicht mit der Änderungsmethode.

4-2-4 Erstellen Sie einen eindeutigen Index

Der eindeutige Index wird auch in die Migrationsdatei zum Erstellen der Tabelle oder in die Migrationsdatei zum Hinzufügen und Ändern wie oben beschrieben geschrieben.

class AddNameIndexToTasks < ActiveRecord::Migration[5.2]
 def change
  add_index :task, :name, unique: true
 end
end

Durch Hinzufügen eines eindeutigen Index werden doppelte Werte (in diesem Fall Name) vermieden (keine Abdeckung).

4-3-6 Schreiben Sie den Original-Bestätigungscode (erstellen Sie die Validierungen selbst).

app/models/task.rb


validate :validate_name_not_including_comma

Geben Sie zunächst den Namen der von Ihnen erstellten Validierung in validate ein.

app/models/tasks.rb


private

def validate_name_not_including_comma
  errors.add(:name,'Kommas dürfen keine Kommas enthalten') if name&.include?(',')
end

Definieren Sie den Inhalt der Validierung, die Sie in der privaten Methode erstellt haben (da sie nutzlos ist, wenn sie von außen manipuliert wird). if name & .include? (',') Wenn es einen Namen mit einem Komma gibt, wird dieser normal ausgeführt. Wenn es sich jedoch um einen Namen ohne Komma handelt, ist das Ergebnis null und es tritt ein Fehler auf. Wenn es sich um einen Bocchi-Operator handelt, wird nil und nur das Wort nil ohne Fehler angezeigt.

4-5-1 Sitzung

Durch eine Sitzung können Sie den Status beibehalten, dass Sie beliebig oft auf einer Seite arbeiten (angemeldet werden).

session[user_id] = @user.id

@user.id = session[user_id]

Das Obige ist die Operation zum Einfügen von Informationen in die Sitzung. Unten finden Sie die Operation zum Abrufen des Sitzungswerts.

4-5-2 Erstellen eines Benutzermodells (Passwort-Digest)

Mit Password Digest werden Passwörter verschlüsselt, und Sie müssen sich keine Gedanken über Passwortverlust oder unbefugten Zugriff machen. Um Password Digest kompatibel zu machen, können Sie es verwenden, indem Sie den Code has_secure_password schreiben.

app/models/user.rb


class User < ApplicationRecord
  has_secure_password
end

Schreiben Sie has_secure_password in das Modell. Dann wird es eine Spalte namens password_confimation unter der Passwortspalte geben. Hier können Sie es zweimal eingeben, um Ihr Passwort zu bestätigen. Es wird beurteilt, ob diese beiden Passwörter übereinstimmen, wenn sie mit Passwort-Digest verschlüsselt werden.

4-5-8 Erleichtern Sie das Abrufen von Anmeldeinformationen

User.find_by(id:session[user_id])

Der Code besteht darin, die ID zu finden, mit der Sie sich gerade in der Sitzung befinden. Wenn Sie also angemeldet sind, können Sie den angemeldeten Benutzer mit diesem Code identifizieren. Wenn Sie dies in ApplicationController als Methode definieren, funktioniert User.find_by (id: session [user_id]) in jeder Aktion und Sie erhalten Informationen, dass Sie angemeldet sind. Erstellen Sie also eine neue Methode

app/controllers/application_controller.rb


class ApplicationController < ActionController::Base
  helper_method :current_user

 private

 def current_user
   @current_user||=User.find_by(id:session[user_id]) if session[:user_id]
 end
end

"Wenn @current_user funktioniert, @current_user, wenn nicht, wenn user_id in Sitzung ist, suchen Sie die Informationen des Benutzers, der sich in Sitzung befindet, und legen Sie sie als Variable @current_user fest." Ist als current_user-Methode definiert. Diese Methode sollte nicht von außen manipuliert werden, also setzen Sie sie in die private Methode

4-5-9 Abmeldefunktion implementieren

Der Anmeldestatus lautet reset_session zum Abmelden.

app/controllers/session_controller.rb


 def destroy
   reset_session
   redirect_to root_url, notice: 'abgemeldet'
end

Reset_session ist also im Destroy Controller definiert.

4-5-11-1 Benutzer und Aufgabe in der Datenbank zuordnen

Die wichtige Beziehung zwischen Benutzer und Aufgabe ist [eins zu viele]. Es gibt eine Situation, in der es mehrere Aufgaben für einen Benutzer gibt. Spezifische Assoziation wird beschrieben.

  1. Zunächst muss sich die Benutzerspalte der Task-Benutzerinformationen im Status NOT NULL befinden.

db/migrate/XXXXXXXXXX_AddUserIdToTasks.rb


class AddUserIdToTasks < ActiveRecord::Migration[5.2]
 def up
   execute 'DELETE FROM tasks;'
   add_reference :tasks, user, null: false, index: true
 end

 def down
   remove_reference :tasks, :user, index: true
 end
end

remove_reference: Verwenden Sie die Referenz, wenn Sie einer Spalte Einschränkungen hinzufügen möchten. remove_reference: Aufgaben,: Benutzer, Index: true ← Entfernen Sie diese Daten add_reference: task, user, null: false, index: true ← Eine Einschränkung wurde hinzugefügt, sodass der Benutzer null: false wird. execute'DELETE FROM task; '← Möglicherweise gibt es Daten, bei denen der Benutzer null war: false, bevor die Einschränkung angewendet wurde, und wenn dies der Fall ist, tritt ein Fehler auf. Also habe ich diesen Code verwendet, um alle Daten in der Tabelle zu löschen.

2.1 Erstellen Sie Beziehungen mit has_many: Aufgaben und Gehört_zu, die Eins-zu-Viele-Beziehungen darstellen.

app/models/user.rb


 has_many :tasks
end

app/models/task.rb


 belongs_to :user
end

Die Beziehung zwischen den Datenbanken wird vom Modell hergestellt. Geben Sie daher das Modell ein. user has many tasks tasks belongs to user Weil es eine Beziehung von sein wird Has_many: Aufgaben im Benutzermodell Gehört zu: Benutzer im Aufgabenmodell Hinzufügen.

4-5-11-3 Registrierung der Aufgabendaten des angemeldeten Benutzers

Die Anmeldeaktion zum Anmelden lautet wie folgt

app/controller/tasks_controller.rb


 def create
   @task = Task.new(task_params)
・
・
・
・
・
 private

 def task_params
   params.require(:task).permit(:name, :descrition)
 end
end

Bei dieser Geschwindigkeit erstellt @task eine neue Aufgabe, aber Sie wissen nicht, dass es sich um die Aufgabe des angemeldeten Benutzers handelt. Schreiben Sie also den obigen Code neu

app/controller/tasks_controller.rb


 def create
   @task = current_user.task.new(task_params)
・
・
・
・
・
 private

 def task_params
   params.require(:task).permit(:name, :descrition)
 end
end

Durch Hinzufügen von current_user wird es zu einer Aufgabe, die "aktuell angemeldet" bedeutet. Mit anderen Worten, wenn Sie current_user am Anfang hinzufügen, bedeutet dies "angemeldet". Zum Beispiel Task.find (params [: id]) → Ruft die Aufgabe mit der angegebenen ID ab current_user.tasks.find (params [: id]) → Ruft die angegebene Aufgabe aus den Aufgaben der angemeldeten Person ab.

Verwenden Sie den Bereich 4-8

order (created_at :: desc) usw. kann mit scope in einen einfacheren Namen umbenannt werden.

scope :recent, -> {order(created_at: :desc)}

Mit diesem Code kann die Reihenfolge (created_at :: desc) als aktuell umgeschrieben werden.

Andere Dinge, die ich gelernt habe

task.errors.full_messages

Informationen zu Aufgabenfehlern werden angezeigt

task.persisted?

Sie können überprüfen, ob die Aufgabe in der Datenbank registriert wurde.

if task.errors.present?
  ul#errors_explanation
   -task.errors.hull_messages.each do |message|
      li= message

Verwenden Sie Errors.present?, Um festzustellen, ob Fehler vorliegen.

if user&.authenticate(session_params[:password])

private
 def session_params
   params.require(:session).permit(:email, :password)
 end

Ursprünglich Benutzer (session_params [: Passwort]), aber wenn mit Passwort-Digest verschlüsselt Werden Sie Benutzer & .authenticate (session_params [: password]).

if current_user.admin?

Sie können mit admin überprüfen, ob Sie über die Berechtigung zur Benutzerverwaltung verfügen. Der current_user wird hinzugefügt und wird zu einer if-Anweisung mit der Aufschrift "Hat die angemeldete Person Administratorrechte für diesen Benutzer?"

@task = current_user.task.order(created_at: :desc)

order ist eine Operation zum Sortieren der Liste nach den angegebenen Kriterien Dieses Mal hat sich die Reihenfolge der Anordnung basierend auf created_at (Erstellungsdatum und -zeit) geändert.

Recommended Posts

Rails Lerntag 3
Rails Lerntag 4
Schienen lernen Tag 2
Schienen Lerntag 1
Schienen lernen 2. Tag 2
Schienen lernen Tag 1 Teil 3
Schienen lernen Tag 3 Teil 2
Schienen lernen Tag 1 Teil 2
Programmiertag 3
Java-Lerntag 5
Java-Lerntag 2
Java-Lerntag 1
Rails Tutorial Kapitel 3 Lernen
[Rails] Lernen mit Rails Tutorial
Rails Tutorial Kapitel 4 Lernen
Rails Tutorial Kapitel 1 Lernen
Rails Tutorial Kapitel 2 Lernen
Ruby on Rails Lernrekord -2020.10.03
Ruby on Rails Lernrekord -2020.10.04
Ruby on Rails Lernrekord -2020.10.05
Ruby on Rails Lernrekord -2020.10.09
Java-Lerntag 4
Ruby on Rails lernen Rekord-2020.10.07 ②
Ruby on Rails lernen Rekord-2020.10.07 ①
Ruby on Rails Lernrekord -2020.10.06
[Schienen g. Fehler]
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 10
Java lernen (0)
Rubin lernen 4
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 7
Rails Review 1
Rails API
Schienenmigration
Rubin lernen 5
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 4
[Rails] first_or_initialize
Java Day 2018
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 9
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 6
Über Schienen 6
Servlet lernen
Ruby lernen 3
Schienenfundament
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 5
Rails Memorandum
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
Lernleistung ~ 11/3 ~
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 2
Rails Tutorial Kapitel 0: Vorbereitende Grundkenntnisse 5
Ruby lernen 2
Maven lernen
[Schienen] erfinden
Rubin lernen 6
Schienen Tutry
Rails Tutorial 6. Ausgabe Lernzusammenfassung Kapitel 3
Schienen Tutorial
Lernergebnisse
Schienen Tipps