В моем проекте Rails у меня есть модель class Employee < ActiveRecord::Base
, у класса есть атрибут с именем компенсация , это тип данных : jsonb в Postgresql.
create_table "employee" do |t|
...
t.jsonb "compensation"
...
end
Компенсация содержит заработную плату, working_hours, start_from и т. Д.
compensation : {
salary: 50000,
working_hours: 230,
start_from: 2018-12-21,
...
}
То, что я хочу сделать, это то, что перед тем, как экземпляр Employee будет отображен как JSON и ответ на внешний интерфейс, мне нужно удалить атрибут зарплаты в компенсации . В employee_controller
я пытался использовать
def get_without_salary
employee = Employee.find 2
employee.compensation.delete :salary
jsonapi_render json: employee
end
но результат JSON по-прежнему содержит данные о зарплате.
Я могу заставить его работать только:
temp_compensation = employee.compensation.dup
temp_compensation.delete :salary
employee.compensation = temp_compensation
но это слишком уродливо и смущает меня, почему первый путь не удался.
Может кто-нибудь объяснить мне, почему? Спасибо