С помощью 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
И мы закончили. Я надеюсь, что это было полезным и счастливым кодированием.