J'essaye de générer une réponse JSON qui inclut du HTML. Ainsi, j'ai /app/views/foo/bar.json.erb
:
{
someKey: 'some value',
someHTML: "<%= h render(:partial => '/foo/baz') -%>"
}
Je veux qu'il soit rendu /app/views/foo/_baz.html.erb
, mais il ne fera que rendre /app/views/foo/_baz.json.erb
. Passer :format => 'html'
n'aide pas.
ruby-on-rails
format
render
partial
actionview
James A. Rosen
la source
la source
Réponses:
À partir de Rails 3.2.3, lors de l'appel de render: partial (ne fonctionne qu'en dehors du
respond_to
bloc).au lieu de
la source
:format
option le ferait travail. Merci!:content_type
option dans certains cas - par exemple, le rendu d'un modèle HTML à partir d'unformat.pdf
bloc ne peut être effectué qu'avecrender "template", formats: [:html], content_type: "text/html"
. J'en ai besoin car j'autorise le téléchargement direct d'échantillons de mes livres uniquement pour les membres de ma liste de diffusion - les visiteurs réguliers reçoivent un formulaire d'inscription à la place.Quel est le problème avec
? J'ai juste essayé ceci pour rendre un HTML ERB partiel à partir d'un modèle de générateur Atom et cela a bien fonctionné. Pas de dérangement avec les variables globales requises (ouais, je sais qu'ils ont "@" devant eux, mais c'est ce qu'ils sont).
Votre
with_format &block
approche est cool cependant, et a l'avantage que vous ne spécifiez que le format, tandis que l'approche simple spécifie également le moteur de modèle (ERB / builder / etc).la source
baz.en.html.erb
,baz.fr.html.erb
) et que vous voulezrender :partial
une logique pour choisir le bon (avec des solutions de secours, etc.).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]
lieu defoo.baz.[your_string]
. La réponse de zgchurc est une meilleure solution.Pour Rails 3, le bloc with_format fonctionne, mais c'est un peu différent:
la source
Rails 4 vous permettra de passer un paramètre de formats. Alors tu peux faire
Notez que vous pouvez faire quelque chose de similaire dans Rails 3, mais cela ne transmettra pas ce format à aucun sous-partiel (si form appelle d'autres partiels).
Vous pouvez avoir la capacité Rails 4 dans Rails 3 en créant config / initializers / renderer.rb:
Voir http://railsguides.net/2012/08/29/rails3-does-not-render-partial-for-specific-format/
la source
En m'appuyant sur la réponse de roninek , j'ai trouvé la meilleure solution:
dans /app/helpers/application.rb:
Dans /app/views/foo/bar.json:
Une autre solution serait de redéfinir
render
pour accepter un:format
paramètre.Je ne pouvais pas
render :file
travailler avec les locaux et sans une certaine imprudence.la source
Dans Rails 3, la vue a un tableau de formats, ce qui signifie que vous pouvez la définir pour rechercher [: mobile,: html]. Paramètre qui recherchera par défaut: les modèles mobiles, mais reviendra à: les modèles html. Les effets de ce réglage se répercuteront sur les partiels internes.
La meilleure façon, mais toujours imparfaite, que j'ai pu trouver pour définir cela était de mettre cette ligne en haut de chaque modèle mobile complet (mais pas de partiels).
Le défaut est que vous devez ajouter cette ligne à plusieurs modèles. Si quelqu'un connaît un moyen de définir cela une fois, à partir de application_controller.rb, j'aimerais le savoir. Malheureusement, cela ne fonctionne pas pour ajouter cette ligne à votre mise en page mobile, car les modèles sont rendus avant la mise en page.
la source
En expliquant simplement ce que zgchurch a écrit:
J'ai pensé que cela pourrait être utile.
la source
Vous avez deux options:
1) utiliser
render :file
2) changer le format du modèle en html en définissant la variable @template_format
la source
J'avais un fichier nommé 'api / item.rabl' et je voulais le rendre à partir d'une vue HTML, j'ai donc dû utiliser:
render file: 'api/item', formats: [:json]
(
file
parce que le fichier n'a pas de trait de soulignement dans le nom,formats
et nonformat
(et passe et tableau))la source
Il semble que passer une
formats
option la rendra correctement dans la nouvelle version de Rails, au moins 3.2:la source
Je suis tombé sur ce fil lorsque j'essayais de rendre un partiel XML dans un autre fichier de vue xml.builder. Suivre est une bonne façon de le faire
Et ouais ... Le nom complet du fichier fonctionne ici aussi ...
la source