В моем приложении 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?
Эта проблема juilder github предполагает, что это возможно, но указывает на то, что у других возникают аналогичные проблемы.
Я вижу, что rabl (https://github.com/nesquena/rabl/) должен поддерживать макеты (https://github.com/nesquena/rabl/wiki/Using-Layouts), но я решил не использовать это по другим причинам (rabl делает сложные структуры json кошмаром, особенно при попытке контролировать корни объектов и т. д.).