Мне нужно предоставить в ответе JSON в поле JSON наследник_ наследства, чтобы я мог получить его в своем приложении (Angular).Как я могу это сделать?
Я много раз искал ответ на этот вопрос, но не нашел его!
В моем случае у меня есть Пользователь, который может быть Администратором, Сотрудником или Клиентом.Разница лишь в том, что у Клиента есть еще два поля, чем у Администратора и Сотрудника.Вот почему я решил реализовать STI.Не стесняйтесь сказать мне, если я сделал неправильный выбор по этому поводу.
Пример моего user_serializer.rb:
class UserSerializer < ActiveModel::Serializer
attributes :id, :name, :email, :type
end
Мой user.rb находится в / models
Мой users_controllers.rb находится в контроллерах / api / v1 /
ОБНОВЛЕНИЕ:
Мой контроллер:
class Api::V1::UsersController < Api::V1::BaseApiController
before_action :authenticate_user!
# some methods...
def show
user = User.find(params[:id])
if user.present?
render json: { data: user }, status: 200
else
head 404
end
end
# some methods...
private
def user_params
params.require(:user).permit(
:id,
:name,
:email,
:password, :password_confirmation,
:registration,
:cpf,
:landline, :cellphone, :whatsapp,
:simple_address,
:public_agency_id,
:public_office_id,
:type
)
end
end
Моя модель:
class User < ApplicationRecord
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
include DeviseTokenAuth::Concerns::User
# belongs_to :address
attr_accessor :skip_password_validation
validates :name, presence: true
validates :type, presence: true
scope :admins, -> { where(type: 'Admin') }
scope :employees, -> { where(type: 'Employee') }
scope :customers, -> { where(type: 'Customer') }
# CALLBACKS
before_validation :generate_uuid!
before_create :downcase_email
def password_required?
return false if skip_password_validation
super
end
def token_validation_response
{
id: id,
email: email,
name: name,
surname: surname,
cpf: cpf,
landline: landline,
cellphone: cellphone,
whatsapp: whatsapp,
simple_address: simple_address,
created_at: created_at,
updated_at: updated_at,
type: type
}
end
private
def generate_uuid!
self.uid = SecureRandom.uuid if self.uid.blank?
end
def downcase_email
self.email = self.email.delete(' ').downcase
end
end
Пример объекта ответа:
А насчет config / initializers / active_model_serializer.rb, такого файла нетв моем проекте.