Rails 7はjsonapi-serializerからデータ属性を削除します
概要
私の Rails 7 API アプリでは、応答データのシリアル化に jsonapi-serializer gem を使用しています。 JSON API 標準に従っていることはわかっていますが、これはカスタマイズ可能です。以下の JSON を生成する user_serializer を持っています。
{
"data": {
"id": "8",
"type": "user",
"attributes": {
"email": "[email protected]",
"role": "owner",
"created_at": "2022-10-17T23:59:49.897Z"
},
"links": {
"set_password_url": "some_url"
}
}
}
user_serializer.rb
class UserSerializer
include JSONAPI::Serializer
attributes :email, :role, :created_at
link :set_password_url do |_user, params|
params[:password_url]
end
end
登録_コントローラー.rb
def create
user = User.new user_params
if user.save
render json: UserSerializer.new(user, { params: { password_url: 'some_url' } } ).serializable_hash
else
(...)
end
end
この gem を簡単に行う方法は次のとおりです。
{
"email": "[email protected]",
"role": "owner",
"created_at": "2022-10-17T23:59:49.897Z"
"set_password_url": "some_url" # this attribute is not a User model field
}
この答えを見つけましたが、何も変わりませんでした。
解決策
こんにちは、コントローラーにメソッド .dig(:data, :attributes) を追加するだけです。
render json: UserSerializer.new(user, { params: { password_url: 'some_url' } } ).serializable_hash.dig(:data, :attributes)