Der Autor dieses Artikels ist ein Anfänger, der gerade erst anfängt, Programmieren zu lernen. Ich würde mich freuen, wenn Sie auf Fehler hinweisen könnten.
Dieser Artikel ist eine persönliche Notiz von dem, was ich durch Lesen des Ruby on Rails 6 Practical Guide gelernt habe. Es scheint schwer zu lesen zu sein, da es auszugsweise und aufgegriffen ist. Entschuldigung. Dieses Buch hat auch eine Fortsetzung Erweiterung, und beide wurden zum Zeitpunkt des Schreibens des Artikels untersucht. Ich werde auch einen Artikel zur Überprüfung schreiben. Ich werde cp1 und cp2 der Funktionserweiterung überspringen, weil sie die Umgebungskonstruktion und den Code des Hauptteils erklären.
Vorheriger Artikel Ruby on Rails6 - Praktischer Leitfaden cp4 ~ cp6 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp7 ~ cp9 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp10 ~ cp12 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp13 ~ cp15 [Memo] Ruby on Rails6 - Praktischer Leitfaden cp16 ~ cp18 [Memo] Ruby on Rails6 - Praktischer Leitfaden [Erweiterungen] cp3 ~ cp6 [Memo]
before_validation :set_application_start_time
private def set_application_start_time
#Logik weggelassen
end
before_validation führt die entsprechende Methode aus, wenn ein Symbol als Argument angegeben wird.
Es gab viele interessante Codes, aber ich werde dieses Kapitel überspringen, da es schwierig war, allgemeine Informationen auszuschneiden. Ich würde es gerne noch einmal lesen.
Es wird als Race Condition </ strong> bezeichnet, dass das Ergebnis mehrerer parallel laufender Prozesse je nach Reihenfolge und Zeitpunkt unerwartete Ergebnisse liefert. Race-Bedingungen in der Datenbankverarbeitung können durch die Verwendung von exklusiven Sperren </ strong> behoben werden.
Der folgende Code wird verarbeitet, um sich für das Programm zu bewerben.
def accept(program)
ActiveRecord::Base.transaction do
program.lock!
if max = program.max_number_of_paticipants
if program.entries.where(canceled: false).count < max
program.entries.create!(customer: @customer)
return :accepted
else
return :full
end
else
program.entries.create!(customer: @customer)
return :accepted
end
end
end
Im obigen Code wird der Prozess verzweigt, je nachdem, ob die maximale Teilnehmerzahl definiert oder die maximale Teilnehmerzahl erreicht ist. Wenn gleichzeitig Anträge mit der maximalen Teilnehmerzahl gestellt werden, besteht die Gefahr, dass die Teilnehmerzahl überschritten wird. Verwenden Sie lock!, Um eine exklusive Sperre für den Tabellendatensatz für dieses Objekt zu erhalten. Eine Transaktion muss gestartet werden, um eine exklusive Sperre zu erhalten. Wenn im Transaktionsblock eine Ausnahme auftritt, wird die gesamte Verarbeitung zurückgesetzt. Sie müssen save! Oder create! Verwenden, um eine Ausnahme auszulösen, wenn das Speichern in der Datenbank fehlschlägt.
Wenn Sie im Bestätigungsbildschirm auf die Schaltfläche Aktualisieren klicken, wird diese in der Datenbank gespeichert. Wenn Sie auf die Schaltfläche Korrektur klicken, kehren Sie zum Eingabeformular zurück.
# PATCH
def confirm
@confirm_form = Customer::AccountForm.new(current_customer)
@customer_form.assign_attributes(params[:form])
if @customer_form.valid?
render action: "confirm"
else
flash.now.alert = "Es liegt ein Fehler in der Eingabe vor."
render action: "edit"
end
end
haml:_confirm.html.haml
= form_with model: @customer_form, scope: "form",
url: :customer_account do |f|
= f.label :family_name
.field-value.readonly
= @customer_form.customer.send(family_name)
= f.hidden_field :family_name
= f.submit "aktualisieren"
= f.submit "Korrektur", name: "correct"
Die an den Server gesendeten Informationen sind in hidden_field versteckt.
def update
@confirm_form = Customer::AccountForm.new(current_customer)
@customer_form.assign_attributes(params[:form])
if params[:commit]
if @customer_form.save
flash.notice = "Kontoinformationen aktualisiert."
redirect_to :customer_account
else
flash.now.alert = "Es liegt ein Fehler in der Eingabe vor."
render action: "edit"
end
else
render action: "edit"
end
end
Ob die richtige Taste oder die Update-Taste gedrückt wird, hängt davon ab, ob der Wert "commit" im Parameter eingestellt ist.
= f.submit "aktualisieren"
= f.submit "Korrektur", name: "correct"
Sie können der Submit-Methode die Option name geben. Der Standardwert ist Commit. Wenn die Aktualisierungstaste gedrückt wird, wird der Parameter der Taste "Festschreiben" erweitert, und wenn die richtige Taste gedrückt wird, wird der Parameter der Taste "Richtig" auf die Aktualisierungsaktion erweitert.
Wir werden die URLs der folgenden Artikel einzeln hinzufügen.
Ruby on Rails6 - Praktischer Leitfaden [Erweiterungen] cp10 ~ cp12 [Memo]
Recommended Posts