С помощью Rails сериализаторы в Ruby по большей части довольно просты. С помощью гема active_model_serializer простое использование ресурса rails g создаст его вместе с его моделью и контроллером, и все, что вам нужно сделать, это указать атрибуты, которые вы хотите разрешить. Для наших примеров здесь, допустим, мы создаем веб-сайт онлайн-игр, на котором разные пользователи могут загружать игры (есть много игр), мы будем использовать модели ниже для наших примеров.

class User<ApplicationRecord
  has_many :games
end
class Game<ApplicationRecord
  belongs_to :user
end

Наш основной индексный маршрут будет просто отправлять список пользователей, однако, когда пользователь входит в систему, мы хотим отправить все связанные игры вместе с конкретным пользователем в маршруте show.

class UserSerializer < ActiveModel::Serializer  
  attributes :id, :title, :description, :category, :price
end  
class UserSerializer < ActiveModel::Serializer  
  attributes :id, :title, :description, :category, :price
  has_many :games
end

Поскольку наш сериализатор не может выполнять оба этих действия одновременно, здесь на помощь приходит пользовательский сериализатор. Мы оставим первый пример для нашего индекса, создадим, обновим и удалим функциональные возможности и создадим пользовательский сериализатор для шоу. маршрут, начинающийся с [rails g serializer UserGame] в консоли. Затем мы добавим наш атрибут и отношение, как и раньше.

class UserGameSerializer < ActiveModel::Serializer  
  attributes :id, :title, :description, :category, :price
  has_many :games
end

Теперь, чтобы использовать этот сериализатор, нам нужно перейти к пользовательскому контроллеру и добавить его в наш маршрут.

class UserController<ApplicationController

def show 
  user = User.find(params[:id])
  render json: :user, serializer: :UserGameSerializer, status: :ok 
end

end

И мы закончили. Я надеюсь, что это было полезным и счастливым кодированием.