简体   繁体   中英

Rails active_model_serializers not working

This is my first time to use active_model_serializers gem, I have been looking around the documentation and have not found a solution.

I have followed all the Getting Started documentation but when I try to get the serialized record I get standard rails JSON not serialized record.

I found a similar thread in SO: active_model_serializers not working in rails-api , in this thread many people said that we need to manually add include ActionController::Serialization in our ApplicationController. I also have followed, but nothing work. Can anyone help me to solve this problem?

Controller:

class AdministratorsController < ApplicationController
    def login
        @administrator = Administrator.find_by(username: params[:username])

        if @administrator && @administrator.authenticate(params[:password])
            token = encode_token({ administrator_id: @administrator.id })
            render json: { administrator: @administrator, token: token }
        else
            render json: { error: 'Username atau Passowrd anda salah !' }, status: :unauthorized
        end
    end
end

Serializer:

class AdministratorSerializer < ActiveModel::Serializer
  attributes :id, :full_name, :username
end 

Actual Response:

{
    "administrator": {
        "id": 1,
        "full_name": "Kevin Jayden Wivano",
        "username": "kevin",
        "password_digest": "blablabla",
        "created_at": "2021-10-23T15:36:15.793Z",
        "updated_at": "2021-10-23T15:56:27.782Z"
    },
    "token": "theJWTtoken"
}

Expected Response:

{
    "administrator": {
        "id": 1,
        "full_name": "Kevin Jayden Wivano",
        "username": "kevin"
    },
    "token": "theJWTtoken"
}

Try the below:

    render json: {:administrator => AdministratorSerializer.new(@administrator).to_h}

In place Of:

    render json: { administrator: @administrator, token: token }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM