所以我工作的一大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