Cette fois, nous allons apprendre comment fonctionne before_action
à travers le développement d'applications.
Il est utilisé lorsque vous souhaitez effectuer un traitement avant d'exécuter l'action du contrôleur de rails, ou lorsque vous souhaitez combiner le traitement d'une même description.
La méthode d'écriture de base est la suivante
tests_controller.rb
before_action :Le nom de la méthode que vous souhaitez traiter
Dans ce cas, la méthode spécifiée sera traitée avant que chaque méthode définie dans le même contrôleur ne soit exécutée.
Vous pouvez également limiter l'action avec uniquement ou sauf comme dans la méthode resources.
tests_controller.rb
before_action :Le nom de la méthode que vous souhaitez traiter, only: [:Action 1,:Action 2]
Dans ce cas, la "méthode à traiter" spécifiée n'est exécutée qu'avant l'exécution des actions 1 et 2.
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])⇦ Le traitement souffre
end
def update
@category = Category.find(params[:id])⇦ Le traitement souffre
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])⇦ Le traitement souffre
@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
Comme vous pouvez le voir, la description est couverte dans l'édition, la mise à jour et la recherche.
Par conséquent, refactorisez le code ci-dessus et
categories_controller.rb
class CategoriesController < ApplicationController
before_action :set_category, only: [:edit, :update, :search]⇦ Ajouter
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])⇦ Résume les traitements courants
end
end
Le processus commun est résumé par une méthode appelée set_category, et il est appelé par before_action lors de l'exécution de l'action de mise à jour, de modification et de recherche.
authenticate_user!
before_action :authenticate_user!
Ce qui précède a "authenticate_user!", Qui est une méthode qui peut être utilisée quand le dispositif est introduit. Cette méthode passe à l'écran de connexion si vous n'êtes pas connecté.
Vous pouvez souvent voir que vous utilisez un site de vente par correspondance tel qu'Amazon, mais vous pouvez parcourir les produits sans vous connecter, mais vous serez invité à vous connecter lorsque vous procéderez à l'achat.
De cette manière, before_action spécifie le traitement courant que vous souhaitez exécuter avant d'exécuter une action.
Cette fois, j'ai en quelque sorte compris comment fonctionne before_action
.
Je suis heureux que vous puissiez l'utiliser comme référence.
Je le mettrai à jour au besoin si je découvre autre chose.
Recommended Posts