Как превратить модель в объект 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
Другие вопросы по тегам