Dieses Mal werden wir lernen, wie "before_action" durch Anwendungsentwicklung funktioniert.
Es wird verwendet, wenn Sie die Verarbeitung ausführen möchten, bevor Sie die Aktion des Rails-Controllers ausführen, oder wenn Sie die Verarbeitung derselben Beschreibung kombinieren möchten.
Die grundlegende Schreibmethode ist wie folgt
tests_controller.rb
before_action :Der Name der Methode, die Sie verarbeiten möchten
In diesem Fall wird die angegebene Methode verarbeitet, bevor jede in derselben Steuerung definierte Methode ausgeführt wird.
Alternativ können Sie die Aktion nur mit oder außer wie in der Ressourcenmethode einschränken.
tests_controller.rb
before_action :Der Name der Methode, die Sie verarbeiten möchten, only: [:Aktion 1,:Aktion 2]
In diesem Fall wird die angegebene "zu verarbeitende Methode" erst ausgeführt, bevor die Aktionen 1 und 2 ausgeführt werden.
categories_controller.rb
class CategoriesController < ApplicationController
def index
@categorys = Category.all
@category = Category.new
end
def create
@category = Category.new(category_params)
if @category.save
redirect_to categories_path
else
@categorys = Category.all
render :index
end
end
def edit
@category = Category.find(params[:id])⇦ Die Verarbeitung leidet
end
def update
@category = Category.find(params[:id])⇦ Die Verarbeitung leidet
if @category.update(category_params)
redirect_to categories_path
else
render :edit
end
end
def search
@categorys = Category.where(is_valid: true)
@category = Category.find(params[:id])⇦ Die Verarbeitung leidet
@q = @category.notes.all.ransack(params[:q])
@notes = @q.result(distinct: true)
@title = @category.name
render 'notes/index'
end
private
def category_params
params.require(:category).permit(:name, :is_valid)
end
end
Wie Sie sehen können, wird die Beschreibung in Bearbeiten, Aktualisieren und Suchen behandelt.
Refaktorieren Sie daher den obigen Code und
categories_controller.rb
class CategoriesController < ApplicationController
before_action :set_category, only: [:edit, :update, :search]⇦ Hinzufügen
def index
@categorys = Category.all
@category = Category.new
end
def create
@category = Category.new(category_params)
if @category.save
redirect_to categories_path
else
@categorys = Category.all
render :index
end
end
def edit
end
def update
if @category.update(category_params)
redirect_to categories_path
else
render :edit
end
end
def search
@categorys = Category.where(is_valid: true)
@q = @category.notes.all.ransack(params[:q])
@notes = @q.result(distinct: true)
@title = @category.name
render 'notes/index'
end
private
def category_params
params.require(:category).permit(:name, :is_valid)
end
def set_category
@category = Category.find(params[:id])⇦ Fasst die allgemeine Verarbeitung zusammen
end
end
Der allgemeine Prozess wird durch eine Methode namens set_category zusammengefasst und von before_action aufgerufen, wenn die Aktualisierungsaktion, die Bearbeitungsaktion und die Suchaktion ausgeführt werden.
authenticate_user!
before_action :authenticate_user!
Das obige hat "authenticate_user!", Eine Methode, die verwendet werden kann, wenn ein Gerät eingeführt wird. Diese Methode wechselt zum Anmeldebildschirm, wenn Sie nicht angemeldet sind.
Sie können häufig feststellen, dass Sie eine Versandhandels-Website wie Amazon verwenden. Sie können jedoch Produkte durchsuchen, ohne sich anzumelden. Sie werden jedoch aufgefordert, sich beim Kauf anzumelden.
Auf diese Weise gibt before_action die allgemeine Verarbeitung an, die ausgeführt werden soll, bevor eine Aktion ausgeführt wird.
Dieses Mal habe ich irgendwie verstanden, wie before_action
funktioniert.
Ich bin froh, wenn Sie es als Referenz verwenden können.
Ich werde es nach Bedarf aktualisieren, wenn ich etwas anderes herausfinde.
Recommended Posts