C'est une exigence étrange qui peut avoir besoin d'une autre approche, mais mon cerveau est coincé.
Je veux accomplir quelque chose comme ceci: p> Je veux utiliser Toutefois, ce code soulève Je suppose que je pourrais utiliser une variable d'instance, mais cela semble plus propre, n'est-ce pas? P> P> content_for code> Parce que je souhaiterais ajouter du contenu au : DJS code> Rendement dans d'autres filtres. p> méthode indéfinie_buffer = code>. p>
6 Réponses :
J'ai trouvé un moyen plus propre que de régler le contenu_for du contrôleur.
Dans mon cas, j'ai la barre latérale qui doit être affichée pour chaque vue. P>
dans ma mise en page J'ai p > alors j'ai une partielle appelée alors je Il suffit de mettre un doublure dans chaque vue que je veux aussi avoir aussi la barre latérale p> sinon j'avais déjà utilisé ce p> _set_sidebar.html.erb code> qui fait ce p>
"Ensuite, je viens de mettre un doublure dans chaque i> de voir que je veux aussi avoir aussi la barre latérale" C'est ce que Layouts sont pour (pour les futurs lecteurs).
J'ai trouvé cela utile beaucoup en cas de définition de titre pour ma page.
Je peux simplement définir le contenu_for de contrôleur p> https://gist.github.com/hiroshi/985457
https://github.com/clmntlxndr/content_for_in_controlers P> P>
Essayant ceci en ce moment et sur les rails 3.2 au moins, cela ne fonctionne pas. content_for (: titre) à partir de la vue, mais à partir du contrôleur, il semble aller dans un trou noir.
Avez-vous essayé d'ajouter ce joyau? Github.com/clmntlxndr/content_for_in_controlers
Je n'ai pas ajouté le gemme lui-même mais j'ai pris son code pour voir si cela fonctionnait. On dirait que les rails ont commencé à effacer le contexte de la vue entre le contrôleur étant appelé et le modèle étant rendu, de sorte que le tableau de contexte que vous avez défini à partir du contrôleur ne s'habitue pas à la vue. J'ai fini par utiliser quelque chose de plus simple de toute façon, régler @title du contrôleur puis à la vue du contenu_for.
Merci beaucoup d'avoir posté cela! J'ai pu utiliser cette solution pour remplacer mes titres de page. Acclamations.
Vous devez utiliser #view_context code> méthode à Atteignez le contexte de la vue et vous pouvez ensuite faire la même chose que vous le feriez dans une vue:
view_context.content_for(:something, view_context.render(partial: 'some_partial'))
... ni dans les rails 5 apparemment.
@ Cyrildruchon-doris cristian hey gars, voyez ma réponse ci-dessus.
Si comme moi, vous cherchez simplement à définir du contenu dans le contrôleur comme un titre, il est probablement préférable d'utiliser une variable qui est automatiquement transmise à des vues et d'aides. par exemple.
contrôleur: p> et l'aide: p> et le modèle: p> < Pré> xxx pré> p>
Vous ne pouvez pas utiliser la méthode Vous pouvez faire une expérience dans des contrôleurs comme les contrôleurs comme les contrôleurs : p> Quoi qu'il en soit, si vous souhaitez toujours utiliser content_for code> dans les contrôleurs, même si vous saviez vue_context code> peut fournir la méthode.
Voir le problème ici: https://github.com/rails/rails/issues/4906 a> vue_context code> renvoie toujours un nouvel objet. Lorsque vous appelez View_Context.content_for (: Somethin, 'Content') Code ') Il stocke le contenu par exemple la variable du nouvel objet. P> content_for code> dans les contrôleurs, vous pouvez remplacer vue_context code> dans les contrôleurs en tant que contrôleurs solution de contournement. Mais je ne sais pas si des effets secondaires. p>
vue_context code> n'a pas fonctionné en 5.1.4 Render Inline: Erb code> a fait: p>
render inline: <<~ERB, layout: 'layout_expecting_subtabs'
<% content_for(:subtabs, render(partial: 'somewhere/subtabs') ) %>
<h1> yielded content </h1>
ERB
Pour les futurs lecteurs, reportez-vous à la réponse de @ Camden à l'aide d'une variable d'instance passée à la vue. Les contrôleurs ne sont pas censés savoir ce que vous voulez faire avec vos informations, mais simplement pour le transmettre à la vue (et
content_for () code> est une valeur de vue). Cela n'est pas appelé "contrôleur de vue modèle" pour rien.