【问题标题】:undefined local variable or method `confirmed_at' for #User#User 的未定义局部变量或方法“confirmed_at”
【发布时间】:2012-02-02 07:16:04
【问题描述】:

我正在使用 Rails 3。可能存在重复的 here。但它并没有解决我的问题,也没有任何其他解决方案。

我的迁移如下

class AddConfirmableToDevise < ActiveRecord::Migration
  def change
    change_table(:users) do |t| 
      t.confirmable 
    end
    add_index  :users, :confirmation_token, :unique => true 
  end
end

我确实在User 模型中添加了devise :confirmable

我的rake db:migrate 没有输出。我的注册页面给出了错误:

undefined local variable or method 'confirmed_at' for #User

有人知道吗?

【问题讨论】:

  • 您应该知道,devise 中的迁移助手(如t.confirmable)自 2.0 版起已弃用。从现在开始,你应该是adding devise columns manually

标签: ruby-on-rails devise


【解决方案1】:

好的。我解决了。迁移已过时。使用相同的代码但使用另一个名称生成新的迁移。

1.运行命令:

rails g migration add_confirmable_to_devise_v1

2.在迁移文件中:

class AddConfirmableToDeviseV1 < ActiveRecord::Migration
  def change
    change_table(:users) do |t| 
      t.confirmable 
    end
    add_index  :users, :confirmation_token, :unique => true 
  end
end

3.那么

rake db:migrate

【讨论】:

    【解决方案2】:

    作为最新的设计,您只需要从设计用户迁移的以下行中删除 cmets.. (2013....._devise_create_users.rb)

      # Confirmable
      t.string   :confirmation_token
      t.datetime :confirmed_at
      t.datetime :confirmation_sent_at
      t.string   :unconfirmed_email # Only if using reconfirmable
    

    【讨论】:

      【解决方案3】:

      为我自己做笔记。有人可能会觉得它有帮助: 我们需要的是以下两条命令:

          rake db:migrate:reset 
          rake db:reset
      

      瞧!有效!

      【讨论】:

      • db:resetrake db:migrate:reset 是什么? rake -D db:resetrake -D db:migrate:reset 没有显示任何内容...
      【解决方案4】:

      为了将@DevDude 的答案与接受的答案联系起来——如果您已经有一个现有的Users 模型,您需要添加可确认的模型,那么截至 4 月 14 日的 Devise 当前版本的完整迁移代码是:

      class AddConfirmableToDeviseV1 < ActiveRecord::Migration
        def change
          change_table(:users) do |t|
             # Confirmable
             t.string   :confirmation_token
             t.datetime :confirmed_at
             t.datetime :confirmation_sent_at
             t.string   :unconfirmed_email # Only if using reconfirmable
           end
           add_index  :users, :confirmation_token, :unique => true 
         end
      end
      

      【讨论】:

      • 是的,这是正确的答案。事实上,当您最初生成设计迁移时,这将被注释掉。
      【解决方案5】:

      我正在使用 Mongoid 并遇到同样的错误。我添加了这些字段,并让 rspec 在我的 16 个示例中变为绿色。

      field :confirmation_token,   :type => String
      field :confirmed_at,         :type => Time
      field :confirmation_sent_at, :type => Time
      field :unconfirmed_email,    :type => String
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-06-24
        • 1970-01-01
        • 1970-01-01
        • 2017-01-26
        • 2018-04-19
        相关资源
        最近更新 更多