フィールドを指定せずにActiveRecordモデルを誤ってシリアル化するのを防ぐためのパッチを導入しました。この変更により、どのフィールドを含めるかを制御し、不完全または過剰なデータが公開される可能性のある問題を回避します。
デフォルトでは、ActiveRecordモデルをJSONとしてレンダリングするとすべての属性が含まれますが、これは多くの場合望ましくありません。より良いプラクティスを強制するために、シリアル化されるべきフィールドを指定する必要があります。
使用例
誤った使用法:
def show
@user = User.first
render json: @user
end
開発環境およびテストでは、次のような結果になります。
ActiveRecordSerializationSafety::BlockedSerializationError:
フィールドを指定せずにActiveRecordモデル (User) をシリアル化することは許可されていません。
Serializerを使用するか、#serializable_hashに:onlyオプションを渡してください。詳細: 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で変更を提案してください。