Nova Togatorop
Nova Togatorop

Reputation: 29

Problem with Devise to add email confirmation

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"

enter image description here

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

Answers (1)

user11350468
user11350468

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

Related Questions