Vor der Registrierung wird ein Bestätigungsbildschirm angezeigt. Nach der Bestätigung stellen Sie die zu registrierenden Daten ein. Schreiben Sie zunächst die Aktion (konform_neue Aktion), die den Bestätigungsbildschirm auf dem Controller anzeigt.
app/controller/tasks_controller.rb
def confirm_new
@task = current_user.tasks.new(task_params)
render :new unless @task.valid? #Wenn in der Datenbank@Ausführen, wenn keine Aufgabe vorhanden ist
Dann füllen Sie das Routing aus
config/routes.rb
resources :tasks do
post :confirm, action: :confirm_new, on: :new
end
post :confirm, action: :confirm_new, on: :new Dieser Teil hatte ursprünglich die folgende Form
config/routes.rb
resources :tasks do
new do
post :confirm, action: :confirm_new
end
end
Wenn der neue Block nur ein Element enthält, wird es unter Verwendung des Namens on :: block danach weitergeleitet.
Erstellen Sie als Nächstes eine Bestätigungsbildschirmansicht
slim:app/views/tasks/confirm_new.html.slim
h1 Bestätigung neuer Inhalte
= form_with model: @task, local: true do |f|
table.table.table-hover
tbody
tr
th= Task.human_attribute_name(:name)
td= @task.name
=f.hidden_field :description
tr
th= Task.human_attribute_name(:description)
td= simple_format(@task.description)
=f.hidden_field :description
=f.submit 'Rückkehr', name: 'back', class: 'btn btn-secondary mr-3'
=f.submit 'Anmeldung', class: 'btn btn-primary'
Auf dem Bestätigungsbildschirm oben befinden sich zwei Schaltflächen, eine Zurück-Schaltfläche und eine Registrierungstaste. Wenn die Zurück-Taste funktionieren soll, müssen Sie bestimmen, welche dieser beiden Tasten gedrückt wird. Daher wird dem Namensattribut der Schaltfläche "Zurück" "Zurück" hinzugefügt. Wenn beim Programmieren das Namensattribut zurück gedrückt wird, kehrt es zur ursprünglichen Operation zurück. Mit anderen Worten, das Ergebnis von params [: back] sollte erhalten werden. Sie können in die Aktion create die Aktion zum Zurückkehren zum Original schreiben, wenn params [: back] gedrückt wird.
app/controllers/tasks_controller.rb
def create
@task = current_user.tasks.new(task_params)
if params[:back].present? #present?Ist ein boolescher Wert, der wahr ist, wenn es einen Wert gibt
render :new
return
end
Arten von Methoden für boolesche Werte
Methodenname | Bedeutung der Methode |
---|---|
nil? | True, wenn der Wert der Variablen null oder kein Wert ist |
empty? | Der Wert der Variablen ist""True wenn (für Zeichenfolgen) oder wenn der Wert leer ist. Null?Der Unterschied zu ist leer?Kann einen variablen Wert haben, aber dieser Wert zeigt leer an |
blank? | True, wenn es keinen Wert gibt |
present? | True, wenn es einen Wert gibt |
Wenn die Anzahl der Aufgaben in der Aufgabenliste zunimmt, wird es schwierig, sie einzeln zu finden. Zu solchen Zeiten wäre es bequem, eine Suchfunktion zu haben. Verwenden Sie einen Edelstein namens Ransack, um eine Suchfunktion hinzuzufügen
7-2-2 Suche nach Namen Fügen Sie Suchfunktionen mit Ransack hinzu
app/controllers/tasks_controller.rb
def index
@q = current_user.task.ransack(params[:q])
@task = @q.result(distinct: true).recent
end
@q = current_user.task.ransack(params[:q])
Suchen Sie bei der Durchsuchung nach Abfrageparametern (params [: q]). Durchsuchen Sie die Aufgabe des angemeldeten Benutzers mit Ransack und geben Sie sie als @q ein
@task = @q.result(distinct: true).recent
@Q, das bei der Suche herauskam Ausgenommen doppelte Suchergebnisse (Ergebnis (eindeutig: wahr)) Anzeige in der Reihenfolge von Registrierungsdatum und -zeit (aktuell)
Nachdem wir Ransack implementiert haben, suchen wir tatsächlich in der Ansicht. Verwenden Sie search_form_for, um Suchfunktionen hinzuzufügen
slim:app/views/tasks/index.html.slim
h1 Aufgabenliste
= search_form_for @q, class: 'mr-5' do |f|
.form_group.row
=f.label :name_cont, 'Name', class: 'col-sm-2 col-form-label'
.col-sm-10
=f.search_field :name_cont, class: 'form-control'
.form-group.row
=f.label :created_at_gteq, 'Eingetragenes Datum', class: 'col-sm-2 col-form-label'
.col-sm-10
= f.search_field :created_at_gteq, class: 'form-control'
.form-group
=f.submit class: 'btn btn-outline-primary'
= link_to 'Anmelden', new_task_path, class: 'btn btn-primary mb-3'
name_cont: Wählen Sie den Namen aus, der teilweise mit dem Namen übereinstimmt. .search_field: Wo ausfüllen created_at_gteq: Wählen Sie einen Beitrag aus, der größer ist als das von Ihnen eingegebene Datum und die Uhrzeit der Eingabe (Zukunft: gteq).
app/controllers/tasks_controller.rb
def index
@q = current_user.task.ransack(params[:q])
@task = @q.result(distinct: true).recent
end
Früher habe ich nach den letzten sortiert, aber als nächstes werde ich in beliebiger Reihenfolge sortieren Zuerst ärgern
app/controllers/tasks_controller.rb
def index
@q = current_user.task.ransack(params[:q])
@task = @q.result(distinct: true)
end
ruby:app/views/tasks/index.html.slim
table.table.table-hover
thead.thead-default
tr
th= sort_link(@q, :name, default_order: :desc)
th= Task.human_attribute_name(:created_at)
th
Wenn Sie sort_link hinzufügen, können Sie Sortiervorgänge ausführen. Das erste Argument ist der Wert, der durch Durchsuchen erhalten wird (hier @q). Das zweite Argument ist die zu sortierende Spalte (Name in diesem Fall) default_order: :desc
Rails verwendet einen Mechanismus namens Mailer, um E-Mails zu senden. Verfassen und senden Sie E-Mails mit Mailer. Mailer beschreibt in Mailer-Datei
app/mailers/task_mailer.rd
class TaskMailer < ApplicationMailer
def creation_email(task)
@task = task
mail(
subject: 'E-Mail zum Abschluss der Aufgabenerstellung'
to: 'user@example'
from: 'taskleaf@example'
)
end
end
Legen Sie die Mail mit Informationen wie Betreff, von und als Methode "create_email" fest
Machen Sie es möglich, tatsächlich E-Mails zu senden
app/controllers/tasks_controller.rb
def create
@task = current_user.tasks.new(task_params)
if params[:back].present?
render :new
return
end
if @task.save
TaskMailer.creation_email(@task).deliver_now
redirect_to @task, notice: "Aufgabe"#{@task.name}Wurde registriert"
else
render :new
end
end
Wenn Sie TaskMailer.creation_email (@task) .deliver_now wie oben hinzufügen, wird eine E-Mail über @task gesendet. Deliver_Now ist eine Methode zur sofortigen Übertragung. Es gibt auch eine Deliver_Later-Methode
Ein Dateiverwaltungsjuwel namens Active Storage kommt heraus und verwendet sie zum Anhängen von Fotos und Bildern Um es tatsächlich anzuhängen, hängen Sie es mit der folgenden Methode an
app/models/task.rb
class Task < ApplicationRecord
has_one_attached :image
....
end
Mit der Methode has_one_attached ist es möglich, ein Bild einer Aufgabe zuzuordnen.
ruby:app/views/tasks/_form.html.slim
...
...
...
.form-group
=f.label :image
=f.file_field :image, class: 'form-control'
...
end
Setze "image: image" auch in ja.yml Erlaube sowohl Erlaubnis als auch Image der task_params-Methode
Schreiben Sie den Code so, dass er auch auf dem Bestätigungsbildschirm angezeigt wird
ruby:app/views/tasks/show.html.slim
...
tr
th= Task.human_attribute_name(:image)
td= image_tag @task.image if @task.image.attached?
tr
...
...
...
if @ task.image.attached? Gibt an, ob das Bild angehängt ist. Wenn es ein tatsächliches Bild gibt, zeigen Sie es mit image_tag an
Je mehr Aufgaben es gibt, desto schwieriger ist es, alle bisher durchgeführten Informationen anzuzeigen. Wenn die Anzahl der Dateien eine bestimmte Anzahl überschreitet, wird die Paginierung an die nächste Seite übergeben und die Informationen werden entsprechend der Seite verteilt, um den Vorgang zu vereinfachen. Für diese Paginierung wird eine Edelsteindatei namens Kaminari verwendet.
Ursprüngliche Datei "asks_controller "
app/controllers/tasks_controller.rb
def index
@q = current_user.task.ransack(params[:q])
@task = @q.result(distinct: true)
end
Durch Hinzufügen von .page (params [: page]) am Ende können Sie die Anzahl der Elemente bestimmen, die pro Seite angezeigt werden sollen (standardmäßig 25 Elemente pro Seite).
app/controllers/tasks_controller.rb
def index
@q = current_user.task.ransack(params[:q])
@task = @q.result(distinct: true).page(params[:page])
end
Stellen Sie als Nächstes sicher, dass es tatsächlich in der Ansichtsdatei angezeigt wird
ruby:app/views/tasks/index.html.slim
.mb-3
=paginate @tasks
=page_entries_info @tasks
...
...
...
Es wird automatisch mithilfe der Hilfsmethode paginate und der Hilfsmethode page_entries_info erstellt.
Rails bietet ein Framework namens Active Job, um verschiedene Prozesse asynchron im Hintergrund auszuführen. ActiveJob wird verwendet, wenn:
・ Die Verarbeitung ist schwer und lässt den Benutzer warten. ・ Ich möchte, dass Sie zum angegebenen Datum und zur angegebenen Uhrzeit Maßnahmen ergreifen
In einem solchen Fall wird der als Sidekiq bezeichnete Mechanismus verwendet.
① Synchronisieren Sie zuerst Rails und Sideskiq
config/environments/development.rb
config.active_job.queue_adapter = :sideskiq
② Erstellen Sie app / jobs / sample_job.rb und erstellen Sie eine Perform-Methode
app/jobs/sample_job.rb
class SampleJob < ApplicationJob
queue_as :deault
def perform(*args)
Sidekiq::Logging.logger.info "Ich habe einen Beispieljob ausgeführt"
end
end
Rufen Sie die zu verarbeitende Methode perform auf
app/controller/tasks_controller.rb
def create
@task = current_user.tasks.new(task_params)
...
if @task.save
TaskMailer.created_email(@task).deliver_now
SampleJob.perform_later
...
...
...
SampleJob.perform_later führt jetzt eine asynchrone Verarbeitung durch
Wenn Sie die set-Methode verwenden, können Sie Datum und Uhrzeit für die Ausführung des Prozesses angeben.
#Laufen Sie am nächsten Tag mittags
SampleJob.set(wait_until: Date.tomorrow.noon).perform_later
#Nach einer Woche laufen
SampleJob.set(wait: 1.week).perform_later
Recommended Posts