2017-08-11 5 views
0

J'ai un modèle d'utilisateur avec 2 modèles associés de profil et de capacités de travail. L'utilisateur a un profil, mais de nombreuses capacités de travail pour différents types de travail. Je veux les énumérer comme un objet JSON combiné comme ce qui suit à l'aide JBuilder:Comment transformer un modèle en objet json en utilisant json jbuilder?

{profile: { first_name: ..., 
      last_name: ..., 
      ... 
      work_capabilities: [ { capability_1: ..., 
            ... 
           }, 
           ... 
           ] 
     } 

}

Actuellement, je peux y parvenir en énumérant explicitement toutes les clés de profil et en utilisant json.extract!

json.profile do 
    json.extract! @profile, :first_name, ... 
    json.work_capabilities @work_capabilities 
    end 

Ma question est, puis-je créer l'objet ci-dessus sans explicitement énumérer tous les attributs de ce profil? Je veux tous les attributs du profil et je préfère ne pas devoir revenir en arrière et modifier le fichier jbuilder chaque fois que j'ajoute un attribut.

+0

dans le contrôleur, vous devriez être en mesure de choisir le format que vous voulez ... json est l'un d'entre eux. https://stackoverflow.com/questions/14330110/how-to-use-rails-format-json#14330187 –

+0

Ce n'est pas ce que je cherche. Je cherche une méthode pour le faire en jbuilder. – sakurashinken

Répondre

0

vous pouvez y parvenir, en faisant par exemple ci-dessous dans votre contrôleur

def index 
    @profile = User.find(params[:id]).profile 
    @capabilities = User.find(params[:id]).capabilities 
end 

puis dans votre 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 
+0

Cela ne répond pas vraiment à la question, qui était: "Ma question est, puis-je créer l'objet ci-dessus sans énumérer explicitement tous les attributs de profil?". Ici, les attributs de profil sont tous explicitement répertoriés. – vijoc

+0

vous devriez essayer json.merge! pour l'attribut de profil –

0

Je pense que cela va résoudre votre problème

json.profile do 
    json.array! @profile_object 
end