تم تقديم تصحيح (patch) لمنع التسلسل (serialization) غير المقصود لنماذج ActiveRecord دون تحديد الحقول المراد تسلسلها. يضمن هذا التغيير التحكم في الحقول التي سيتم تضمينها، مما يتجنب المشكلات المحتملة الناتجة عن كشف بيانات غير مكتملة أو زائدة.
بشكل افتراضي، يؤدي عرض نموذج ActiveRecord بصيغة JSON إلى تضمين جميع السمات، وهو ما قد لا يكون مرغوبًا فيه في كثير من الحالات. لفرض ممارسات أفضل، يجب تحديد الحقول التي ينبغي تسلسلها.
أمثلة على الاستخدام
الاستخدام الخاطئ:
def show
@user = User.first
render json: @user
end
في بيئات التطوير والاختبارات، سيؤدي هذا إلى:
ActiveRecordSerializationSafety::BlockedSerializationError:
Serializing ActiveRecord models (User) without specifying fields is not allowed.
Use a Serializer, or pass the :only option to #serializable_hash. More info: 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.