Rails 3.2 アプリでは、JSON API からの応答をレンダリングするためにjbuilderを使用しています。
すべての API 応答に共通の構造を提供したいと考えており、ビューを DRY に保つためのソリューションとしてレイアウトが適しています。
例: すべての応答を次の形式にしたい:
{
status: "ok|error|redirect",
data: { ... JSON specific to the current view ... },
errors: [ ... ],
notes: [ ... ]
}
(データの値は、ビューによって提供される 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/methodでこれを成功させた人はいますか?
このjuilder github issueは可能性を示唆していますが、他の人にも同様の問題があることを示しています。
rabl (https://github.com/nesquena/rabl/) はレイアウト (https://github.com/nesquena/rabl/wiki/Using-Layouts) をサポートするはずですが、使用しないことにしましたそれは他の理由によるものです (rabl は、複雑な json 構造を悪夢にします。特に、オブジェクトのルートを制御しようとする場合など)。