Friday, 29 November 2024

Add Serializer

Is blog se aap serializer ka name kuchh bhi rakh sakte ho, isme mene index per RolesSerializer and show per RoleDetailsSerializer ka use kiya hai, aap chaho to kisi bhi method per kisi bhi name ka serializer use kar sakte ho, Thanks


 1. Gem

gem 'fast_jsonapi'

run: bundle

---------------

2. app/serializers/base_serializer.rb

class BaseSerializer

  include FastJsonapi::ObjectSerializer

end

---------------

3. A. app/serializers/roles/roles_serializer.rb ## serializers ke ander roles name ka folder bana bhi sakte ho or nhi bhi

module Roles

  class RolesSerializer < BaseSerializer

    attributes :id, :name

  end

end

  B. app/serializers/roles/role_details_serializer.rb 

module Roles

  class RoleDetailsSerializer < BaseSerializer

    attributes :id, :name, :created_at, :updated_at


    attribute :created_at do |object|

      object.created_at.strftime('%Y-%m-%d %H:%M:%S')

    end

  end

end

---------------

4. app/controllers/roles_controller.rb

class RolesController < ApplicationController
before_action :set_role, only: [:show]

def index
roles = Role.all
render json: Roles::RolesSerializer.new(roles).serializable_hash, status: :ok
end

def create
    role = Role.new(role_params)
    if role.save
      render json: Roles::RolesSerializer.new(role, meta: {message: "Role created successfully"}), status: :created
    else
      render json: { errors: { message: role.errors.full_messages } }, status: :unprocessable_entity
    end
  end

  def show
  render json: Roles::RoleDetailsSerializer.new(@role, meta: {message: "Role details"}).serializable_hash, status: 200
  end

  private

  def set_role
      @role = Role.find_by(id: params[:id])
      return render json: {errors: {message: ["Role not found."]}}, :status => :not_found if @role.blank?
    end


  def role_params
  params.require(:role).permit(:name)
  end
end

No comments:

Post a Comment