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

Chr*_*nch 2 ruby-on-rails

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

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

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

Win*_*eld 5

我建议建立一个memoized帮助器:

def current_clients
  @current_clients ||= Client.accessible_by(current_ability)
end
helper :current_clients
Run Code Online (Sandbox Code Playgroud)

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