[RAILS] Qu'est-ce que before_action?

introduction

Cette fois, nous allons apprendre comment fonctionne before_action à travers le développement d'applications.

Qu'est-ce que before_acton?

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.

Exemple d'utilisation réelle

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.

finalement

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

Qu'est-ce que before_action?
Qu'est-ce que Cubby
Qu'est-ce qui est nul? ]
Qu'est-ce que 'java
Qu'est-ce que Keycloak
Qu'est-ce que maven?
Qu'est-ce que soi
Qu'est-ce que Jenkins
Qu'est-ce que ArgumentMatcher?
Qu'est-ce que IM-Juggling?
Qu'est-ce que SLF4J?
Qu'est-ce que la façade? ??
Qu'est-ce que Java <>?
Qu'est-ce que Gradle?
Qu'est-ce que POJO
Qu'est-ce que 'java
Qu'est-ce que RubyGem?
Qu'est-ce que Docker
Qu'est-ce que Byte?
Qu'est-ce que Tomcat
Qu'est-ce que l'assemblage Maven?
Qu'est-ce que `docker-compose up`?
Qu'est-ce qu'un constructeur
Qu'est-ce que vue cli
Qu'est-ce qu'une interface
Qu'est-ce que le moi de Ruby?
Qu'est-ce que le codage en dur?
Qu'est-ce qu'un flux
Qu'est-ce que l'attr_accessor de Ruby?
Qu'est-ce que l'encapsulation Java?
Qu'est-ce qu'une permission refusée?
Qu'est-ce que le contrôle d'instance?
Qu'est-ce qu'un initialiseur?
Qu'est-ce qu'un opérateur?
Qu'est-ce que l'orientation objet?
Qu'est-ce que le @VisibleForTesting de Guava?
Qu'est-ce qu'un modèle MVC?
Qu'est-ce qu'une annotation?
Qu'est-ce que Java API-java
Qu'est-ce que @ (variable d'instance)?
Qu'est-ce que l'artefact de Gradle?
Utilisez before_action! !!
Qu'est-ce que before_action?
Qu'est-ce que l'audit JPA?
[Java] Qu'est-ce que flatMap?
Qu'est-ce qu'un servlet?
Qu'est-ce que le développement Web?
[Java] Qu'est-ce que ArrayList?
Qu'est-ce que l'orientation objet après tout?
Qu'est-ce que HttpSession session = request.getSession ();
Qu'est-ce que l'assertion Java? Résumé.
[Mémorandum] Qu'est-ce qu'une erreur?
Qu'est-ce qu'une classe wrapper?