7
votes

Utilisation de contenu_for à l'intérieur d'un contrôleur

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: xxx

Je veux utiliser content_for Parce que je souhaiterais ajouter du contenu au : DJS Rendement dans d'autres filtres.

Toutefois, ce code soulève méthode indéfinie_buffer = .

Je suppose que je pourrais utiliser une variable d'instance, mais cela semble plus propre, n'est-ce pas?


1 commentaires

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 () est une valeur de vue). Cela n'est pas appelé "contrôleur de vue modèle" pour rien.


6 Réponses :


0
votes

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.

dans ma mise en page J'ai xxx

alors j'ai une partielle appelée _set_sidebar.html.erb qui fait ce xxx

alors je Il suffit de mettre un doublure dans chaque vue que je veux aussi avoir aussi la barre latérale xxx

sinon j'avais déjà utilisé ce

https://gist.github.com/985457 avec .html_safe quand j'ai utilisé rendu_to_string


1 commentaires

"Ensuite, je viens de mettre un doublure dans chaque de voir que je veux aussi avoir aussi la barre latérale" C'est ce que Layouts sont pour (pour les futurs lecteurs).



4
votes

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 xxx

https://gist.github.com/hiroshi/985457
https://github.com/clmntlxndr/content_for_in_controlers


4 commentaires

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.



14
votes

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'))


2 commentaires

... ni dans les rails 5 apparemment.


@ Cyrildruchon-doris cristian hey gars, voyez ma réponse ci-dessus.



4
votes

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: xxx

et l'aide: xxx

et le modèle: < Pré> xxx


0 commentaires


0
votes

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


0 commentaires