Techioz Blog

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)