如何使用json jbuilder将模型转换为json对象?
我有一个用户模型与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文件。
你可以做以下例如在控制器
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
这并没有真正回答这个问题,即:“我的问题是,我可以创建上述对象而不明确列出所有配置文件属性吗?”。这里的配置文件属性都是明确列出的。 – vijoc
你应该试试json.merge!为配置文件属性 –
我认为这将解决您的问题
json.profile do
json.array! @profile_object
end
在控制器中你应该可以选择你想要的格式...... json就是其中之一。 https://*.com/questions/14330110/how-to-use-rails-format-json#14330187 –
那不是我要找的。我正在寻找一种方法在jbuilder中做到这一点。 – sakurashinken