所以我工作的一大Rails项目。有为数众多的使用的before_filter设置@current_user变量类(其实有一吨的这些的before_filter其他变量的方法,但是我用这一个为例):Rails最佳实践:使用before_filter或application_controller辅助方法?
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 helper方法:
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_'部分是多余的。这里唯一的区别是你正在强制加载它,这种方式打败了懒加载的目的。 – tadman