【问题标题】:NoMethodError (undefined method 'active?' for <User:...>)NoMethodError(<User:...> 的未定义方法“活动?”)
【发布时间】:2011-08-12 08:42:18
【问题描述】:

我正在使用 Ruby on Rails 3.0.4 / Devise 1.4.2 / MySQL / Apache/Passenger / FreeBSD

用户在电子邮件确认页面注册时出现问题。同时,确认邮件会发送给新用户,如果您点击确认链接,确认和用户登录工作正常。

models/user.rb:

devise :database_authenticatable, :registerable, :trackable, :recoverable, :confirmable, :validatable, :lockable, :timeoutable

可能是什么?欢迎任何想法。

【问题讨论】:

    标签: ruby-on-rails devise nomethoderror


    【解决方案1】:

    据我所知,Devise 不附带active? 方法。请尝试改用confirmed?,只要您包含Confirmable 模块即可。

    【讨论】:

    • 我将active? 更改为confirmable?,现在该应用程序不会引发错误,而是简单地重定向回登录页面并通知“您必须登录”,这意味着请求的页面(电子邮件确认文本页面)需要授权。
    • 您应该将其更改为 confirmed? 而不是 confirmable?。这里有一个提示:如果我没记错的话,用于确认用户的方法是confirm!(请检查文档以确保)。因此,您可以在控制台中与用户一起玩,同时在浏览器窗口中以您的用户身份进行点击。
    • 对不起,这是我评论中的错字。正如您所建议的,我更改为confirmed? - 它可以工作(至少没有错误),但应用程序的行为是错误的。我正在尝试降级设计版本(因为此代码以前有效)。
    • 是的,怀疑是对的......我降级到 1.3.0 - 并且 active? 方法被 Devise 识别
    【解决方案2】:

    我从未使用过 Devise,但听起来 Devise 可能希望用户表具有布尔“活动”属性。如果有,Rails 会生成active? 方法。

    【讨论】:

    • 我已经检查过了...不,问题似乎与该领域无关。 dev env 上没有这样的字段,它工作正常。
    【解决方案3】:

    答案是:active? 方法仅适用于低于 1.4 的 Devise 版本,对于高于 1.3 的版本应使用confirmed?

    我使用 Devise 1.1.7 生成了 Devise 脚本,然后升级到 1.4.2 - 问题出现了。我降级到 1.3.0,这就是解决办法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-24
      • 1970-01-01
      相关资源
      最近更新 更多