这样做的过滤器是一种常见的做法:
before_filter :get_clients, :only => [:new, :edit, :create, :update]
...
def get_clients
@clients = Client.accessible_by(current_ability)
end
我的表单需要访问@clients,因此我使用before过滤器设置变量@clients,而不是在每个方法中进行。这有意义吗?
答案 0 :(得分:5)
我建议改为构建一个memoized帮助器:
def current_clients
@current_clients ||= Client.accessible_by(current_ability)
end
helper :current_clients
这将与before-filter一样有效,但除非您需要实际加载表单/视图的客户端列表,否则不会运行。你正在懒得加载这个资源。知道如何加载客户端列表的责任仍由控制器保留。