9
votes

Variables d'instance dans la mise en page

Je suis assez nouveau dans les rails, donc je m'excuse si j'utilise la mauvaise terminologie.

J'ai un modèle Menuuiem que je voudrais afficher le contenu de la mise en page. Comment va-t-on passer une variable d'instance dans une mise en page?

Je cherchais un assistant de mise en page d'une sorte, mais j'étais incapable de trouver quoi que ce soit. Je cherchais également à définir la variable d'instance dans le contrôleur d'application pour y accéder dans la mise en page, cela fonctionnerait-il? Si oui, quel est le meilleur moyen de faire le faire?

Merci!


1 commentaires

Désolé je devrais clarifier. Je ne veux pas dire dans une vue, je veux dire les afficher dans une mise en page.


5 Réponses :


1
votes

Toutes les variables d'instance définies dans les contrôleurs sont automatiquement disponibles par magie de votre vue. Si vous attendez une variable d'instance dans votre présentation pour toutes les actions, vous pouvez envisager de définir la variable d'instance dans un fichier avant_filter ou de l'encapsuler dans une méthode de contrôleur et en utilisant HELPER_METHOD pour le rendre accessible à vos vues.


2 commentaires

Pourriez-vous élaborer sur le concept avant_filter? J'ai réfléchi à l'aide de l'helper_method, mais je pense que cela ne me permet que d'utiliser sous des vues et non dans la mise en page où j'en ai besoin.


Helper_Method permet la méthode d'être utilisée dans la couche de vue entière, y compris la mise en page, les vues et les aides.



-3
votes

Cela dépend vraiment de ce que vous voulez faire avec le modèle code>. Je vais deviner, et vous me dites ce dont vous avez besoin de mieux comprendre comment faire cela. Ce code ne fonctionnerait que si votre modèle Menuitem a un champ nommé nom code>.

dans le contrôleur: p> xxx pré>

dans l'index .html.erb code> Affichage Fichier: P>

<ul id="menu">
<% @menu_items.each do |menu_item| %>
   <%= h menu_item.name %>
<% end %>
</ul>


0 commentaires

-3
votes

items_controller.rb code> (ou quelque chose) xxx pré>

dans l'affichage show.html.erb code>: p>

<%= @menu_item.name %>


0 commentaires

3
votes

Deux choses que je noterais. Tout d'abord, vous ne voulez probablement pas faire cette requête chaque fois que vous rendez une page dans votre demande. Vous voulez certainement cacher vos ménulseurs. Deuxièmement, il pourrait être utile de mettre une méthode de commodité sur la classe Menuitems à cacher cette valeur. Donc, si je définis une méthode xxx

je peux appeler menuitem.all_for_menu dans ma mise en page et obtenir tous les éléments de menu. Lorsque vous en ajoutez un nouveau ou en modifiez un, vous devez invalider cela.

Une autre approche de mise en cache serait de mettre les données dans une partie partielle et de cache qui fragment à l'aide de l'appel de cache standard: xxx

Vous pouvez alors expirer ce fragment en appelant: xxx


0 commentaires

16
votes

La manière habituelle de passer des variables à partir de la vue dans la mise en page parent consiste à utiliser la méthode content_for code>. (Cette réponse est une copie + pâte d'une réponse similaire que j'ai postée à Cette question )

Le contenu de la vue normale est rendu automatiquement dans l'appel code> de rendement code> sans argument dans la mise en page. Mais vous pouvez également mettre un autre contenu d'espace réservé en utilisant produire code> avec un argument de symbole et spécifiant ce contenu de la vue avec content_for code>. P>

App / Vues / Layouts / Posts_Layout.html.erb Code> P>

<%= content_for :menu_items, some_helper_to_generate_menu %>
<h1>Here is you page content</h1>


0 commentaires