before_filter设置公共实例变量(Ruby On Rails)

时间:2011-02-28 19:53:55

标签: ruby-on-rails

这样做的过滤器是一种常见的做法:

before_filter :get_clients, :only => [:new, :edit, :create, :update]
...
def get_clients
      @clients = Client.accessible_by(current_ability)
end

我的表单需要访问@clients,因此我使用before过滤器设置变量@clients,而不是在每个方法中进行。这有意义吗?

1 个答案:

答案 0 :(得分:5)

我建议改为构建一个memoized帮助器:

def current_clients
  @current_clients ||= Client.accessible_by(current_ability)
end
helper :current_clients

这将与before-filter一样有效,但除非您需要实际加载表单/视图的客户端列表,否则不会运行。你正在懒得加载这个资源。知道如何加载客户端列表的责任仍由控制器保留。