我们引入了一个补丁,以防止在未指定要序列化的字段的情况下意外序列化 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 上建议更改。