パッチを適用し、フィールドを指定せずに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で変更を提案してください。