Отобразить представление JBuilder в html-представлении

Я создал json-представление с JBuilder. Но я хочу предварительно загрузить это в объект данных, поэтому Backbone имеет доступ к данным на раннем этапе, не получая его.

Как я могу отобразить представление list.json.jbuilder в моем представлении list.html.erb?

Обычно без jbuilder я бы сделал что-то вроде этого:

1 ответ

render при вызове из представления возвращает строковый рендеринг переданного шаблона или частичного; вы можете вставлять эту строку в свое представление по своему усмотрению. Обратите внимание, что:

  • Вам нужно добавить имя вашего шаблона с расширением типа/расширением. Если вы этого не сделаете, Rails может запутаться в том, какой файл шаблона вы вызываете; т.е.: вместо list.json.jbuilder он может выбрать list.html.erb. Если вы делаете этот вызов с list.html.erb, попытка отображения list.html.erb приводит к бесконечной рекурсии и к SystemStackError. Использование параметра :format для render не работает.
  • Вы должны указать подходящий путь к шаблону; он не найдет правильный шаблон для "list.json" только потому, что list.json.jbuilder находится в том же каталоге, что и list.html.erb.
  • Вам необходимо передать вывод вызова render через raw; в противном случае он будет экранирован, когда он будет встроен в представление.

Итак, для вашего примера вы можете написать это, считая, что ваши шаблоны находятся в /app/views/foo:

<div data-list="<%= raw render(:template => " foo="" list.json",="" :locals=""> { :contents => @contents }) %>"></div>

licensed under cc by-sa 3.0 with attribution.