2014-06-07 2 views
0

J'ai un module qui liste events (event_box) et je veux le définir dans le cadre de mon application.html.erb:Rails rendent disponible Enregistrement à la vue de l'application

<div id="left_sidebar"> 
    <%= render 'shared/user_box' %> 
    <%= render 'shared/event_box' %> 
    <%= render 'shared/server_info_box' %> 
</div> 

Cependant, le event_box utilise @events, qui le a besoin d'être bien passé à ce:

def home 
    @events = Event.all 
end 

Si ça va être dans la mise en page de l'application, comment puis-je passer à @events sans définir @events dans chaque vue de ma demande?

Répondre

1

Définissez une méthode dans ApplicationController qui récupère tous les événements. Utilisez cette méthode en tant que before_filter dans ApplicationController. Les filtres appelés ApplicationController s'appliqueront à tous les contrôleurs qui en héritent.

application_controller.rb:

before_filter :fetch_events 

def fetch_events 
    @events = Event.all 
    # @events = Event.where({}) can be used to lazy load the events 
end 

Depuis cela va être exécutée avant chaque action, envisagez d'utiliser Fragment caching pour cette partie particulière de la vue.

+0

merci! a bien fonctionné, merci pour le lien vers la mise en cache des fragments. – Polyov

0

Vous pouvez également essayer le code ci-dessous dans shared/event_box partial. Ça va marcher.

<% @events = Event.all %> 
<% @events.each do |event| %> 
    <p><%= event.column_name %></p> 
<% end %> 
Questions connexes