geekelo / dsa_practice

This repo is maintained just for the purpose of daily data structures and algorithm practice and proficiency
1 stars 0 forks source link

How should you use filters in controllers #25

Open geekelo opened 1 month ago

geekelo commented 1 month ago

Filters in controllers are used to execute certain code before, after, or around controller actions in Ruby on Rails. They provide a way to encapsulate common pre-processing or post-processing logic that needs to be applied across multiple controller actions or controllers themselves. Here's how you can use filters in controllers:

  1. Before Filters: Before filters are executed before the controller action is executed. They are commonly used for tasks such as authentication, authorization, setting up instance variables, or any other pre-processing that needs to be done before handling a request.

    class UsersController < ApplicationController
      before_action :authenticate_user, only: [:edit, :update, :destroy]
    
      def edit
        # This action will only be executed if the user is authenticated
      end
    
      private
    
      def authenticate_user
        # Authentication logic goes here
      end
    end
  2. After Filters: After filters are executed after the controller action is executed but before rendering a response. They are useful for tasks such as logging, modifying the response, or performing cleanup tasks.

    class UsersController < ApplicationController
      after_action :log_action
    
      def create
        # This action will be executed first, then the log_action filter will run
      end
    
      private
    
      def log_action
        # Logging logic goes here
      end
    end
  3. Around Filters: Around filters execute code before and after the controller action. They can modify the response or even bypass the action altogether. They are less commonly used but provide a lot of flexibility.

    class UsersController < ApplicationController
      around_action :wrap_action
    
      def show
        # This action will be wrapped by the wrap_action filter
      end
    
      private
    
      def wrap_action
        # Code executed before the action
        yield # Executes the action
        # Code executed after the action
      end
    end
  4. Skipping Filters: In some cases, you might want to skip certain filters for specific actions or under certain conditions. Rails provides methods like skip_before_action, skip_after_action, and skip_around_action for this purpose.

    class UsersController < ApplicationController
      skip_before_action :authenticate_user, only: [:index, :show]
    
      def index
        # This action will not require authentication
      end
    end

By using filters effectively, you can keep your controller actions clean and organized, reduce code duplication, and ensure consistent behavior across your application.