在我的 Rails 3.2 应用程序中,我使用jbuilder https://github.com/rails/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/方法成功完成此操作?
This juilder github 问题 https://github.com/rails/jbuilder/issues/8表明这是可能的,但表明其他人也遇到类似的问题。
我看到 rabl (https://github.com/nesquena/rabl/)应该支持布局(https://github.com/nesquena/rabl/wiki/Using-Layouts),但我决定不使用出于其他原因(rabl 使复杂的 json 结构成为一场噩梦,特别是在尝试控制对象根等时)。