我有以下application_controller方法:
def current_account
@current_account ||= Account.find_by_subdomain(request.subdomain)
end
我应该使用before_filter还是helper_method来调用它?两者之间的区别是什么?在这种情况下,我应该考虑什么呢?
感谢。
更新更好
我发现我可以使用before_filter
代替helper_method
,因为我可以从我的视图中调用控制器定义的方法。也许这就是我如何安排我的代码,所以这就是我所拥有的:
控制器/ application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
include SessionsHelper
before_filter :current_account
helper_method :current_user
end
助手/ 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
控制器/ spaces_controller.rb
class SpacesController < ApplicationController
def home
unless logged_in?
redirect_to login_path
end
end
end
视图/空间/ home.html.erb
<%= current_account.inspect %>
从理论上讲,这不应该奏效,对吗?
答案 0 :(得分:4)
使用before_filter或helper_method之间没有任何关系。当您在控制器中有一个想要在视图中重用的方法时,应该使用辅助方法,如果您需要在视图中使用它,则current_account可能是helper_method的一个很好的示例。
答案 1 :(得分:3)
它们是两个非常不同的东西。在行动开始之前,您希望将{{1>}称为一次。另一方面,辅助方法经常重复,通常在视图中。
你有那种方法可以保持原状。
答案 2 :(得分:1)
我解决了我的问题。我是Rails的新手,并不知道helpers目录中定义的方法是自动helper_methods。现在我想知道这会如何影响内存/性能。但至少我已经解开了这个谜团。谢谢大家的帮助!