设计:未定义的方法`user_signed_in?' for ApplicationController:Class

时间:2011-10-13 21:44:21

标签: ruby-on-rails devise

我在使用Rails 3.1.1和Ruby 1.9.2时遇到了上述错误。我花了最后一小时看,我发现的主要内容是:

    ApplicationController中的
  1. clear_helpers可能导致帮助程序无法加载。我的代码没有使用它,我不相信我安装的宝石也是。

  2. 在routes.rb中缺少devise_for。我有devise_for :users

  3. 我的用户模型中缺少'database_authenticatable'。我有我的users.rb:

    设计:database_authenticatable,:registerable,   :可恢复的,:可记住的,:可跟踪的,:可验证的

  4. 我的行为完全符合this email thread中描述的内容,但signed_in? :user对我不起作用。但是,Devise.mappings会显示用户映射。

  5. 关于什么可能出错的任何想法?即使是对current_user的破解也会对我有所帮助,因为我必须尽快运行一些功能。

2 个答案:

答案 0 :(得分:1)

3号让我感到奇怪。您的模型文件名为users.rb吗?你的班级宣言是Users < ActiveRecord::Base吗?如果是这样,请将它们更改为以下内容。

users.rb =&gt; user.rb

User < ActiveRecord::Base

答案 1 :(得分:1)

所以我将此标记为社区维基,因为解决方案很简单。

我正在调用调试器(我曾使用以下代码检查current_user

class ApplicationController < ActionController::Base
  protect_from_forgery
  debugger
  filter {|c| Authorization.current_user = c.current_user}
end

Rails使会话和请求对象可用于控制器实例。调试器在self == ApplicationController的上下文中被调用,它应该是self == #<MainController...>

简而言之,请确保您不是在控制器定义中调用它,而是在控制器实例中调用它。