如何使用json jbuilder将模型转换为json对象?

时间:2017-08-11 07:07:38

标签: ruby-on-rails json jbuilder

我有一个用户模型,其中包含2个关联的模型配置文件和工作功能。用户有一个配置文件,但有许多工作功能可用于不同类型的工作。我想使用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文件。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

我认为这将解决您的问题

json.profile do
  json.array! @profile_object
end