在此处输入图片描述我是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
答案 0 :(得分:1)
您的列实际上不在数据库中,因为您的迁移无法正常工作。
从您的迁移中删除def change
,它将覆盖up/down
。
或者,在change
方法中添加列,然后删除up/down
。
答案 1 :(得分:0)
您需要的列不在数据库中。
您应在迁移中删除更改方法。但是您不能更改迁移并再次运行。它不会运行。
您应回滚迁移,编辑迁移文件,然后再次运行它。
检查此答案以说明问题:https://stackoverflow.com/a/10767930/3372172