Мы внедрили патч, предотвращающий случайную сериализацию моделей ActiveRecord без указания полей для сериализации. Это изменение позволяет контролировать, какие поля включаются в результат, избегая потенциальных проблем с раскрытием неполных или избыточных данных.
По умолчанию при рендеринге модели ActiveRecord в JSON включаются все атрибуты, что во многих случаях нежелательно. Чтобы обеспечить более правильные практики, необходимо явно указывать, какие поля следует сериализовать.
Примеры использования
Неверное использование:
def show
@user = User.first
render json: @user
end
В среде разработки и при тестировании это приведёт к следующему:
ActiveRecordSerializationSafety::BlockedSerializationError:
Сериализация моделей ActiveRecord (User) без указания полей не разрешена.
Используйте Serializer или передайте опцию :only в #serializable_hash. Подробнее: https://meta.discourse.org/t/-/314495
./lib/freedom_patches/active_record_disable_serialization.rb:15:in `serializable_hash'
Правильное использование:
- Использование Serializer
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.