2010-05-07 11 views
1

Je suis en train utilisant une partie pour rendre le menu de l'application, en capitalisant l'onglet « » en utilisant le CSS, basé sur une variable locale (onglet):passer une variable de vue de la mise en page vue partielle de

<%= link_to "employees", jobs_path, :class => (tab=="employees" ? "selected":"unselected") %> 
    <a class="unselected">jobs</a> 
    <%= link_to "tags", tags_path, :class => (tab=="tags" ? "selected":"unselected") %> 

Le partielle est intégrée dans la mise en page de l'application:

<body> 
... 
<!-- tab variable needs to be set in the view, not the layout --> 
<%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %> 
... 
</body> 

Malheureusement, je dois définir la valeur de la variable dans la vue, mais la variable n'est pas disponible. Dois-je utiliser le symbole: content_for au lieu de: local? À un certain point, il se peut que je souhaite transmettre une variable d'instance de modèle au partiel, de sorte que la solution doit être flexible.

Y a-t-il une meilleure approche?

Répondre

2

j'ai décidé d'utiliser la link_to_unless_current UrlHelper:

<%= link_to_unless_current "enroll", enroll_path, :class => "unselected" do 
    link_to "enroll", enroll_path, :class => "selected" 
end %> 
2

Je pense qu'il ya plusieurs façons de gérer cela, voici un - pas nécessairement le meilleur

<!-- layout --> 
<body> 
    <%= yield(:tabs_navigation) %> 
    ... 
</body> 

<!-- views --> 
<%- tabs_navigation(render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" }) %> 

une autre façon - utiliser une variable membre au lieu de la population locale (ce qui est un peu comme la tricherie - mais efficace)

<!-- layout --> 
<body> 
    <%= render :partial => "layouts/primary_menu" %> 
    .... 
</body> 

<!-- views --> 
<%- @current_tab = "profiles" %> 

maintenant accès à l'@current_tab directement dans la primary_menu partielle

en utilisant content_for

<!-- layout --> 
<body> 
    <%= yield(:tabs_navigation) %> 
    ... 
</body> 

<!-- views --> 
<%- content_for :tabs_navigation do -%> 
    <%= render :partial => "layouts/primary_menu", :locals => { :tab => "profiles" } %> 
<%- end -%> 

http://guides.rubyonrails.org/layouts_and_rendering.html#understanding-yield

+0

: travaillera content_for? – craig

+0

a ajouté du contenu, par exemple; assez verbeux quand vous voulez juste changer la valeur d'une seule variable – house9

Questions connexes