Я пытаюсь создать ответ JSON, содержащий некоторый HTML. Таким образом, у меня есть /app/views/foo/bar.json.erb
:
{
someKey: 'some value',
someHTML: "<%= h render(:partial => '/foo/baz') -%>"
}
Я хочу его рендерить /app/views/foo/_baz.html.erb
, но он будет только рендеринг /app/views/foo/_baz.json.erb
. Прохождение :format => 'html'
не помогает.
ruby-on-rails
format
render
partial
actionview
Джеймс А. Розен
источник
источник
Ответы:
Начиная с Rails 3.2.3, при вызове render: partial (работает только вне
respond_to
блока).вместо того
источник
:format
вариант будет работай. Спасибо!:content_type
параметр в некоторых случаях - например, рендеринг HTML-шаблона изнутриformat.pdf
блока может быть выполнен только сrender "template", formats: [:html], content_type: "text/html"
. Мне это нужно, потому что я разрешаю прямую загрузку образцов моих книг только участникам моего списка рассылки - вместо этого обычные посетители получают форму подписки.Что случилось с
? Я просто попробовал это для рендеринга части HTML ERB из шаблона построителя Atom, и он работал нормально. Не нужно возиться с глобальными переменными (да, я знаю, что перед ними стоит "@", но это то, что они есть).
Тем не менее, ваш
with_format &block
подход крутой и имеет то преимущество, что вы указываете только формат, тогда как простой подход также определяет механизм шаблонов (ERB / builder / etc).источник
baz.en.html.erb
,baz.fr.html.erb
) и вам нужнаrender :partial
логика для выбора правильного (с запасными вариантами и т. Д.).DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:erb] instead.
foo.baz.html.[your_string]
вместоfoo.baz.[your_string]
. Ответ zgchurc - лучшее решение.Для Rails 3 блок with_format работает, но он немного отличается:
источник
Rails 4 позволит вам передать параметр форматов. Так ты можешь сделать
Обратите внимание, что вы можете сделать что-то подобное в Rails 3, но он не будет передавать этот формат каким-либо подчиненным частям (если форма вызывает другие частичные элементы).
Вы можете получить возможность Rails 4 в Rails 3, создав config / initializers / renderer.rb:
См. Http://railsguides.net/2012/08/29/rails3-does-not-render-partial-for-specific-format/
источник
Основываясь на ответе roninek , я нашел лучшее решение:
в /app/helpers/application.rb:
В /app/views/foo/bar.json:
Альтернативным решением было бы переопределение
render
для принятия:format
параметра.Я не мог
render :file
работать с местными жителями и без некоторой нестабильности.источник
В Rails 3 View имеет массив форматов, что означает, что вы можете настроить его на поиск [: mobile,: html]. Установка по умолчанию будет искать: мобильные шаблоны, но вернется к: html-шаблонам. Эффекты от установки этого будут каскадированы во внутренние частичные.
Лучший, но все же ошибочный способ, который я смог найти, - это поместить эту строку вверху каждого полного мобильного шаблона (но не частичного).
Недостаток в том, что вам нужно добавить эту строку в несколько шаблонов. Если кто-нибудь знает способ установить это один раз, из application_controller.rb, я бы хотел это знать. К сожалению, добавить эту строку в ваш мобильный макет не получится, потому что шаблоны отображаются до макета.
источник
Просто уточняя, что написал zgchurch:
Думал, может быть полезно.
источник
У вас есть два варианта:
1) использовать
render :file
2) измените формат шаблона на html, установив переменную @template_format
источник
У меня был файл с именем api / item.rabl, и я хотел отобразить его из представления HTML, поэтому мне пришлось использовать:
render file: 'api/item', formats: [:json]
(
file
потому что у файла нет нижнего подчеркивания в имени,formats
а нетformat
(а передает и массив))источник
Кажется, что передача
formats
параметра будет правильно отображать его в более новой версии Rails, по крайней мере, 3.2:источник
Я наткнулся на эту тему, когда пытался отрендерить партиал XML в другом файле представления xml.builder. Вот хороший способ сделать это
И да ... Полное имя файла здесь тоже работает ...
источник