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

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

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

  2. 缺少devise_for中的devise_for。 我有devise_for :users

  3. 在我的Users模型中缺少’database_authenticatable’。 我有我的users.rb:

    设计:database_authenticatable,:registerable,:recoverable,:rememberable,:trackable,:validatable

  4. 我的行为完全匹配除了signed_in? :user之外的电子邮件线程中描述的signed_in? :user signed_in? :user也不适合我。 但是, Devise.mappings确实显示了用户映射。

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

3号让我觉得奇怪。 您的模型文件名为users.rb吗? 你的类声明Users < ActiveRecord::Base ? 如果是这样,请将它们更改为以下内容。

users.rb => user.rb

User < ActiveRecord::Base

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

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

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

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

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