Reputation: 29
I want to add email confirmation in my rails app with Devise. I got this error message:
"NoMethodError in Devise::RegistrationsController#create undefined method `confirmation_instructions' for MailForm::Base:Class"
schema.rb
create_table "users", force: :cascade do |t|
t.string "email", default: "", null: false
t.string "encrypted_password", default: "", null: false
t.string "reset_password_token"
t.datetime "reset_password_sent_at"
t.datetime "remember_created_at"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.string "username"
t.string "first_name"
t.string "last_name"
t.float "latitude"
t.float "longitude"
t.boolean "admin", default: false
t.string "confirmation_token"
t.datetime "confirmed_at"
t.datetime "confirmation_sent_at"
t.string "unconfirmed_email"
t.index ["email"], name: "index_users_on_email", unique: true
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
end
user.rb
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :validatable, :confirmable
end
routes.rb
Rails.application.routes.draw do
devise_for :users
resources :users do
member do
get :confirm_email
end
end
devise.rb
Devise.setup do |config|
config.mailer_sender = '[email protected]'
#mail_form
config.mailer = 'MailForm::Base'
end
development.rb
config.action_mailer.default_url_options = { host: "https://myapp.com" }
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = true
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
authentication: 'plain',
enable_starttls_auto: true,
user_name: ENV['GMAIL_EMAIL'],
password: ENV['GMAIL_PASSWORD']
}
production.rb
config.action_mailer_default_url_options = { host: 'https://myapp.com' }
Rails.application.routes.default_url_options[:host] = 'https://myapp.com'
config.action_mailer.delivery_method = :smtp
config.action_mailer.perform_deliveries = true
config.action_mailer.raise_delivery_errors = false
config.action_mailer.default charset: 'utf-8'
config.action_mailer.smtp_settings = {
address: 'smtp.gmail.com',
port: 587,
domain: 'gmail.com',
authentication: 'plain',
enable_starttls_auto: true,
user_name: ENV['GMAIL_EMAIL'],
password: ENV['GMAIL_PASSWORD']
}
Is this because mail_form gem for contact form? Should I create RegistrationController
? Can anyone guess the main problem here?
Upvotes: 1
Views: 339
Reputation: 1407
confirmation_instructions
is the method defined on the Devise mailer
Try changing the mailer config in devise.rb
Devise.setup do |config|
config.mailer_sender = '[email protected]'
config.mailer = 'Devise::Mailer'
end
Upvotes: 1