ruby-on-rails 未定义#User的局部变量或方法“confirmed_at”

l2osamch  于 2022-12-20  发布在  Ruby
关注(0)|答案(6)|浏览(137)

我使用的是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

有人知道吗?

af7jpaap

af7jpaap1#

好的。我解决了这个问题。迁移已经过时。用相同的代码生成新的迁移,但使用另一个名称。
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.Then

rake db:migrate
2skhul33

2skhul332#

对于最新的设备,您只需删除以下有关设备用户迁移的行中的注解..(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
nkkqxpd9

nkkqxpd93#

给我自己留个条。也许有人会觉得有用:我们需要的是下面的2个命令:

rake db:migrate:reset 
    rake db:reset

哇!成功了!

zour9fqk

zour9fqk4#

为了将@DevDude的答案与已接受的答案联系起来-如果您已经有一个Users模型需要添加confirmable,截至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
3hvapo4f

3hvapo4f5#

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

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

koaltpgm6#

将confirmable添加到用户模型后,deviegem需要应用程序在用户表中包含confirmation_token、confirmated_at、confirmated_sent_at、unconfirmed_email和confirmation_token。
1.使用以下命令生成新迁移
rails g迁移添加可确认到设备
1.将代码添加到新创建的迁移文件中

class AddConfirmableToDevise < ActiveRecord::Migration[7.0]
def up
    add_column :users, :confirmation_token, :string
    add_column :users, :confirmed_at, :datetime
    add_column :users, :confirmation_sent_at, :datetime
    add_column :users, :unconfirmed_email, :string
    add_index :users, :confirmation_token, unique: true
    User.update_all confirmed_at: DateTime.now
end
def down
    remove_index :users, :confirmation_token
    remove_columns :users, :confirmation_token, :confirmed_at, :confirmation_sent_at
  end
end

1.运行迁移
rails数据库:迁移

相关问题