Как превратить модель в объект json, используя json jbuilder?
У меня есть пользовательская модель с двумя связанными моделями профиля и рабочими возможностями. У пользователя один профиль, но много рабочих возможностей для разных видов работ. Я хочу перечислить их как объединенный объект json, как показано ниже, используя jbuilder:
{profile: { first_name: ...,
last_name: ...,
...
work_capabilities: [ { capability_1: ...,
...
},
...
]
}
}
В настоящее время я могу добиться этого путем явного перечисления всех ключей профиля и использования json.extract!
json.profile do
json.extract! @profile, :first_name, ...
json.work_capabilities @work_capabilities
end
У меня вопрос, могу ли я создать вышеуказанный объект без явного перечисления всех атрибутов профиля? Я хочу, чтобы каждый атрибут в профиле, и я предпочел бы не возвращаться и редактировать файл jbuilder каждый раз, когда я добавляю атрибут.
2 ответа
Вы можете добиться этого, выполнив ниже, например, в вашем контроллере
def index
@profile = User.find(params[:id]).profile
@capabilities = User.find(params[:id]).capabilities
end
тогда в вашем index.json.jbuilder
json.user do
json.profile do
json.first_name @profile.first_name
json.last_name @profile.first_name
end
json.work_capabilities @work_capabilities.each do |work_capability|
json.capability_1 work_capability.capability_1
json.capability_2 work_capability.capability_2
.
.
.
end
end
Я думаю, что это решит вашу проблему
json.profile do
json.array! @profile_object
end