在轨道5上设计确认不起作用

时间:2017-08-29 16:05:23

标签: ruby-on-rails ruby devise ruby-on-rails-5 devise-confirmable

我在rails 5 app上。使用设计进行用户管理。我在我的用户模型中启用了“确认”,并且迁移也是相同的。我已经创建了一个从Devise :: Mailer派生的自定义邮件程序类,已经在设计配置中设置邮件程序以使用自定义邮件程序类,但我的确认电子邮件未正确发送。 已经尝试了很多这样的答案线程,但还是无法破解它。我哪里可能出错?

用户模型

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

  after_create :send_confirmation_email

  def send_confirmation_email
    p 'inside after_create callback func.'
    MyDeviseMailer.confirmation_instructions(self).deliver
  end

end

迁移可确认

def up
    add_column :users, :confirmation_token, :string
    add_column :users, :unconfirmed_email, :string
    add_column :users, :confirmed_at, :datetime
    add_column :users, :confirmation_sent_at, :datetime
    add_index :users, :confirmation_token, unique: true
end

我的自定义邮件程序类派生自Devise :: Mailer

class MyDeviseMailer < Devise::Mailer

  helper :application
  include Devise::Controllers::UrlHelpers
  default template_path: 'devise/mailer'

  def confirmation_instructions(record, token, opts={})
    devise_mail(record, :confirmation_instructions, opts)
  end
end

1 个答案:

答案 0 :(得分:1)

几个小时之后,我发现我正在采取错误的做事方式。在here之后写了一篇写得很好的文章。更新了我的解决方案:

重构了我的自定义邮件程序类中的 confirmation_instructions 方法,如下所示:

def confirmation_instructions(record, token, opts={})

    if record.email.present?
      opts[:subject] = "Welcome #{record.email.split('@').first.capitalize}, Confirm your asana account"
    else
      opts[:subject] = "Confirm Your Asana Account"
    end

    super

  end

用户模型中将功能调用更改为此内容:

MyDeviseMailer.confirmation_instructions(self, self.confirmation_token).deliver

这最终对我有用。