Ruby on rails 3 初始值设定项更改后';alias#u方法';未定义的方法';当前用户';对于类';应用控制器&x27;

Ruby on rails 3 初始值设定项更改后';alias#u方法';未定义的方法';当前用户';对于类';应用控制器&x27;,ruby-on-rails-3,devise,Ruby On Rails 3,Devise,我有以下初始值设定项: app/config/initializers/store_location.rb module StoreLocation def self.skip_store_location [ Devise::SessionsController, Devise::RegistrationsController, Devise::PasswordsController ].each do |controlle

我有以下初始值设定项:

app/config/initializers/store_location.rb

module StoreLocation

  def self.skip_store_location
    [
        Devise::SessionsController,
        Devise::RegistrationsController,
        Devise::PasswordsController
    ].each do |controller|
      controller.skip_before_filter :store_location
    end
  end

  self.skip_store_location
end
my ApplicationController的相关部分:

class ApplicationController < ActionController::Base
  protect_from_forgery
  before_filter :convert_legacy_cookies
  before_filter :store_location

  alias_method :devise_current_user, :current_user

  def current_user
    # do something
  end

  private
  def store_location
    # store location
  end
如果我让RSpec/Rails运行self.skip\u store\u位置,我将得到以下错误:

/foo/app/controllers/application_controller.rb:7:in `alias_method': undefined method `current_user' for class `ApplicationController' (NameError)

如果我取消呼叫,一切都会恢复正常(除了过滤器按预期运行)。我猜我不知怎么搞砸了依赖项加载?

问题是在
ApplicationController
中定义方法之前,您使用了
alias\u方法。要解决此问题,请移动线路

alias_method :devise_current_user, :current_user
下面


运行
skip\u store\u location
时出现错误有点误导。我假设发生这种情况是因为
skip\u store\u location
加载了多个控制器,其中一个是
ApplicationController

的子类。我尝试了您的方法,但堆栈级别出现了严重错误,现在我在
当前用户
方法中使用了一个
超级
调用,效果很好。重要的是确定罪犯的身份。非常感谢你是个天才!嗨,Tammo,自从我实现了SkipLocations特性以来,我刚刚遇到Spork没有找到我的ApplicationHelper方法。您是否有任何快速猜测错误可能在哪里的方法?我没有使用Spork,因此我只有一般的快速猜测:如果您得到
NoMethodError
/
NameError
,则包含代码的文件不会加载。如果没有调用您的方法,可能是由于
别名\u方法
引起的。例如:如果您
alias_method:b,:a
并在之后更改
a
,调用
b
将调用
a
的旧版本,而不是新版本。您好,Tammo/PizzaPill,您能准确地编写解决问题的代码片段吗?超级方法似乎对我不起作用。嗨,拉贾特,我的解决方案是修复
namererror
异常,该异常是由于尝试在尚未定义的方法上使用
alias\u方法而导致的。代码中存在的问题是什么?
alias_method :devise_current_user, :current_user
def current_user
  # do something
end