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
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.
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.
$ 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),
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.
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).
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.
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.
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.
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
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.
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.
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.
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.
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.
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