在我的 rails 3.2 应用程序中,我使用的是 jbuilder呈现来自我的 JSON api 的响应。
我想为所有 API 响应提供一个通用结构,并且布局可能是保持我的 View DRY 的可能解决方案。
例如:我希望每个回复都采用以下形式:
{
status: "ok|error|redirect",
data: { ... JSON specific to the current view ... },
errors: [ ... ],
notes: [ ... ]
}
(其中 数据 的值是 View 提供的 json 结构,其他一切都来自布局)
但是:我无法让 jbuilder 布局正确地屈服于 View 。
# 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/method 成功做到这一点?
此 juilder github issue表明这是可能的,但表明其他人也有类似的问题。
我看到 rabl (https://github.com/nesquena/rabl/) 应该支持布局 (https://github.com/nesquena/rabl/wiki/Using-Layouts),但我决定不使用它出于其他原因(rabl 使复杂的 json 结构成为一场噩梦,尤其是在尝试控制对象根等时)。
最佳答案
你可以通过这种方式做到这一点
# api.v1.json.jbuilder - layout
json.request do
json.message "your message"
json.status 200
end
json.data JSON.parse(yield)
# show.json.jbuilder - action view
json.name 'Some item name'
关于ruby-on-rails - 带有 Jbuilder(或其他)的 Rails JSON API 布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11516616/