为什么application.rb中的公共方法不能通过帮助程序对所有视图和控制器可用:all?

时间:2012-10-18 11:15:35

标签: ruby-on-rails

我认为以下helper:all中的application.rb会使current_user对每个控制器和视图都可用?

class ApplicationController < ActionController::Base

  helper :all
  protect_from_forgery
  before_filter { |c| Authorization.current_user = c.current_user }

  def current_user_session
    return @current_user_session if defined?(@current_user_session)
    @current_user_session = UserSession.find
  end

  def current_user
    return @current_user if defined?(@current_user)
    @current_user = current_user_session && current_user_session.record
  end

  ...

  private

  ...

  protected

  ...

end

我的观点会像这样调用current_user方法:

- if current_user
  = link_to "Logout", logout_path

我得到了这个回复:

undefined local variable or method `current_user' for #<#<Class:0x007f971d812a48>:0x007f972050c378>

我错过了什么?

非常感谢,

史蒂芬。

PS我已经在与失败的视图相关联的控制器中进行了实验:

before_filter :current_user

1 个答案:

答案 0 :(得分:1)

From the doc:

  

当参数是符号:all时,控制器将包含所有   ActionController :: Base.helpers_dir下的助手(默认为   RAILS_ROOT下的app / helpers / * /。rb。

您正在寻找:

helper_method :current_user, :current_user_session