我有一个列出events
(event_box
)的模块,我想将其定义为application.html.erb
的一部分:
<div id="left_sidebar">
<%= render 'shared/user_box' %>
<%= render 'shared/event_box' %>
<%= render 'shared/server_info_box' %>
</div>
但是,event_box
使用@events
,到目前为止需要传递给它:
def home
@events = Event.all
end
如果它将出现在应用程序布局中,如何在我的应用程序的每个视图中定义@events
时将@events
传递给它?
答案 0 :(得分:1)
在ApplicationController
中定义一个方法,用于获取所有事件。
将此方法用作before_filter
中的ApplicationController
。在ApplicationController
中调用的过滤器将应用于从中继承的所有控制器。
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
由于这将在每个操作之前执行,因此请考虑对视图的特定部分使用Fragment caching。
答案 1 :(得分:0)
您也可以在shared / event_box partial中尝试以下代码。它会起作用。
<% @events = Event.all %>
<% @events.each do |event| %>
<p><%= event.column_name %></p>
<% end %>