Мы внедрили патч для предотвращения случайной сериализации моделей ActiveRecord без указания полей для сериализации. Это изменение гарантирует, что мы контролируем, какие поля включаются, избегая потенциальных проблем с неполными или избыточными данными.
По умолчанию рендеринг модели ActiveRecord в формате JSON включает все атрибуты, что во многих случаях может быть нежелательно. Чтобы внедрить лучшие практики, необходимо указывать, какие поля должны быть сериализованы.
Примеры использования
Неправильное использование:
def show
@user = User.first
render json: @user
end
В среде разработки и при тестировании это приведет к следующей ошибке:
ActiveRecordSerializationSafety::BlockedSerializationError:
Сериализация моделей ActiveRecord (User) без указания полей не допускается.
Используйте сериализатор или передайте опцию :only в метод #serializable_hash. Подробнее: https://meta.discourse.org/t/-/314495
./lib/freedom_patches/active_record_disable_serialization.rb:15:in `serializable_hash'
Правильное использование:
- Использование сериализатора
class UserSerializer < ApplicationSerializer
attributes :id, :email
end
def show
@user = User.first
render json: @user, serializer: UserSerializer
end
- Использование опции
:only
def show
@user = User.first
render json: @user.as_json(only: [:id, :email])
end
Этот документ находится под контролем версий — предложите изменения на GitHub.