Rails使记录可用于应用程序视图

时间:2014-06-07 07:59:01

标签: ruby-on-rails ruby model-view-controller

我有一个列出eventsevent_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传递给它?

2 个答案:

答案 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 %>