在我的 rails 3.2 应用程序中,我使用jbuilder来呈现来自我的 JSON api 的响应。
我想为所有 API 响应提供一个通用结构,并且布局可能是保持我的视图干燥的解决方案。
例如:我希望每个回复都采用以下形式:
{
status: "ok|error|redirect",
data: { ... JSON specific to the current view ... },
errors: [ ... ],
notes: [ ... ]
}
(其中data的值是视图提供的 json 结构,其他一切都来自布局)
但是:我无法让 jbuilder 布局正确地屈服于视图。
# in layout
json.data yield
# in view
json.some "value"
结果是:
{"data":"{\"some\":\"value\"}"} # arg! my json has become a string
尝试另一种方式:
# in layout
yield
# in view
json.data do |json|
json.some "value"
end
结果是 :
{}
有没有人用 jbuilder 或其他 json 模板 gem/方法成功地做到这一点?
这个juilder github 问题表明这是可能的,但表明其他人也有类似的问题。
我看到 rabl(https://github.com/nesquena/rabl/)应该支持布局(https://github.com/nesquena/rabl/wiki/Using-Layouts),但我决定不使用出于其他原因(rabl 使复杂的 json 结构成为一场噩梦,尤其是在尝试控制对象根等时)。