我有下面的application_controller方法:
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain)
end
我应该使用before_filter还是helper_method来调用它?两者之间有什么区别,我在这种情况下应该考虑哪些权衡?谢谢。
为了更好的清晰度更新:
我发现我可以使用before_filter而不是helper_method,因为我能够从视图中调用控制器定义的方法。也许是我的代码编写方式有问题,所以这是我的代码:
controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
before_filter :current_account
helper_method :current_user
end
helpers/sessions_helper.rb
module SessionsHelper
private
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain)
end
def current_user
@current_user ||= User.find(session[:user_id]) if session[:user_id]
end
def logged_in?
if current_user
return true
else
return false
end
end
end
controllers/spaces_controller.rb
class SpacesController < ApplicationController
def home
unless logged_in?
redirect_to login_path
end
end
end
views/spaces/home.html.erb
<%= current_account.inspect %>
在理论上,这不应该起作用,对吧?
helper_method :current_account
,那么该方法将在视图中可用。 - tsherifbefore_filter
。 - NathanSessionsHelper
中定义了current_account
,默认情况下视图可以使用它。然后你通过在ApplicationController
中包含SessionsHelper
,使其对所有控制器可用。 - James