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