Подтвердить что ты не робот

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

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

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

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

<div data-list="<%= @contents.to_json %>"></div>
4b9b3361

Ответ 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>