2017-08-11 131 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