2017-08-11 221 views
0

我有一個用戶模型與2個關聯的模型配置文件和工作能力。用戶具有一個配置文件,但是具有用於不同類型工作的許多工作能力。我想列出他們像下面使用JBuilder的組合JSON對象:如何使用json jbuilder將模型轉換爲json對象?

{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文件。

+0

在控制器中你應該可以選擇你想要的格式...... json就是其中之一。 https://stackoverflow.com/questions/14330110/how-to-use-rails-format-json#14330187 –

+0

那不是我要找的。我正在尋找一種方法在jbuilder中做到這一點。 – sakurashinken

回答

0

你可以做以下例如在控制器

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 
+0

這並沒有真正回答這個問題,即:「我的問題是,我可以創建上述對象而不明確列出所有配置文件屬性嗎?」。這裏的配置文件屬性都是明確列出的。 – vijoc

+0

你應該試試json.merge!爲配置文件屬性 –

0

我認爲這將解決您的問題

json.profile do 
    json.array! @profile_object 
end