Devise :: RegistrationsController#create中的NameError:未定义的局部变量或方法`confirmed_at`

时间:2019-01-31 12:15:27

标签: ruby-on-rails ruby email devise actionmailer

在此处输入图片描述我是Rails的新手,我正在尝试设计一种为用户获取身份验证电子邮件的方式

# user.rb:          
class User < ApplicationRecord
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
  :recoverable, :rememberable, :trackable,                                                      
  :validatable, :confirmable
end

# development.rb       
config.action_mailer.perform_deliveries = true
config.action_mailer.default_url_options = { host: ENV['MAIL_HOST'] }  
config.action_mailer.delivery_method = :smtp      
config.action_mailer.smtp_settings = {
  address: "smtp.gmail.com",
  port: 587,
  domain: ENV['MAIL_HOST'],
  authentication: "plain",
  enable_starttls_auto: true,
  user_name: ENV["GMAIL_USERNAME"],
  password: ENV["GMAIL_PASSWORD"] 
}
config.action_mailer.default_url_options = {:host => "localhost:3000"}

class AddConfirmableToDevise < ActiveRecord::Migration[5.2]
  def change
  end

  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 
    # Only if using reconfirmable
    add_index :users, :confirmation_token, :unique => true
    # User.reset_column_information 
    # Need for some types of updates, but not for update_all.
    # To avoid a short time window between running the migration and updating all existing
    # users as confirmed, do the following
    User.update_all(:confirmed_at => Time.now)
    # All existing user accounts should be able to log in after this.
  end

  def down
    remove_columns :users, :confirmation_token, :confirmed_at,  :confirmation_sent_at
    # remove_columns :users, :unconfirmed_email # Only if using reconfirmable
  end
end

我得到的错误是

  

#的未定义局部变量或方法`confirmed_at'是您的意思吗?确定吗?   github仓库是https://github.com/dinesh124/roughmart

2 个答案:

答案 0 :(得分:1)

您的列实际上不在数据库中,因为您的迁移无法正常工作。

从您的迁移中删除def change,它将覆盖up/down

或者,在change方法中添加列,然后删除up/down

答案 1 :(得分:0)

您需要的列不在数据库中。

您应在迁移中删除更改方法。但是您不能更改迁移并再次运行。它不会运行。

您应回滚迁移,编辑迁移文件,然后再次运行它。

检查此答案以说明问题:https://stackoverflow.com/a/10767930/3372172