【发布时间】:2016-11-07 16:52:38
【问题描述】:
所以我正在做一个大型的 Rails 项目。有很多类使用 before_filter 来设置 @current_user 变量(实际上还有很多其他变量的 before_filter 方法,但我以这个为例):
before_filter :current_user
调用应用程序控制器的 current_user 方法:
class ApplicationController < ActionController::Base
def current_user
@current_user ||= session[:user_id].present? ? User.includes(:memberships).find(session[:user_id]) : nil
end
另一种选择是使用 application_controller 辅助方法:
class ApplicationController < ActionController::Base
helper_method :get_current_user
def get_current_user
@current_user ||= session[:user_id].present? ? User.includes(:memberships).find(session[:user_id]) : nil
end
然后我将应用程序中的所有@current_user 引用替换为对辅助方法的调用:
get_current_user
这确保该方法只在需要它的方法或视图中被调用,对吗?使用 before_filter 是否有性能优势?
【问题讨论】:
-
没有必要称它为
get_current_user。在典型的 Ruby 代码中,get_部分是多余的。这里唯一的区别是你强制加载它,这违背了延迟加载的目的。
标签: ruby-on-rails ruby activerecord