Using Enums in API Responses (Serialization Techniques)

When exposing enums through APIs, returning raw integer values can be confusing. Instead, convert enums into human-readable JSON responses.

Method 1: Using as_json for Enum Serialization

Override as_json in your model:

class User < ApplicationRecord
  enum :status, { active: 0, inactive: 1, banned: 2 }

  def as_json(options = {})
    super(options).merge(status: self.status)
  end
end

Now, calling:

user.as_json

returns:

{ "id": 1, "name": "John Doe", "status": "active" }

instead of:

{ "id": 1, "name": "John Doe", "status": 0 }

Method 2: Using Rails API Serializer (ActiveModelSerializers)

If using ActiveModelSerializers, you can define a custom attribute:

class UserSerializer < ActiveModel::Serializer
  attributes :id, :name, :status

  def status
    object.status
  end
end

This ensures consistent API responses.