我什么时候应该使用before_filter vs helper_method?

时间:2012-04-06 02:06:44

标签: ruby-on-rails before-filter

我有以下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 %>

从理论上讲,这不应该奏效,对吗?

3 个答案:

答案 0 :(得分:4)

使用before_filter或helper_method之间没有任何关系。当您在控制器中有一个想要在视图中重用的方法时,应该使用辅助方法,如果您需要在视图中使用它,则current_account可能是helper_method的一个很好的示例。

答案 1 :(得分:3)

它们是两个非常不同的东西。在行动开始之前,您希望将{{1>}称为一次。另一方面,辅助方法经常重复,通常在视图中。

你有那种方法可以保持原状。

答案 2 :(得分:1)

我解决了我的问题。我是Rails的新手,并不知道helpers目录中定义的方法是自动helper_methods。现在我想知道这会如何影响内存/性能。但至少我已经解开了这个谜团。谢谢大家的帮助!