我正在使用设计和 actionmailer。我想知道如何在用户在应用程序上确认他的帐户之后而不是之前触发 actionmailer 方法。这个 actionmailer 方法只不过是一条欢迎消息。
另外,我如何获取相同的用户信息,例如姓名或电子邮件?我试过了resource
。但它没有用。
我正在使用设计和 actionmailer。我想知道如何在用户在应用程序上确认他的帐户之后而不是之前触发 actionmailer 方法。这个 actionmailer 方法只不过是一条欢迎消息。
另外,我如何获取相同的用户信息,例如姓名或电子邮件?我试过了resource
。但它没有用。
这实际上是一个相对容易的任务。您需要做的就是为您的 User 类创建一个观察者。
class UserObserver < ActiveRecord::Observer
def after_save(user)
if user.confirmed_at_changed?
#send email
end
end
end
Rails 3:使用 Devise 发送欢迎电子邮件有一个很好的答案,你可以做类似的事情
class User < ActiveRecord::Base
devise # ...
# ...
def confirm!
welcome_message # define this method as needed
super
end
# ...
end
这做到了。
after_save :send_welcome_email
def send_welcome_email
WelcomeEmail.notify(self).deliver if self.confirmed_at_changed?
end
Devise 有一个针对这种情况的内置回调。
# A callback initiated after successfully confirming. This can be
# used to insert your own logic that is only run after the user successfully
# confirms.
#
# Example:
#
# def after_confirmation
# self.update_attribute(:invite_code, nil)
# end
#
def after_confirmation
end
您可以在 devise/lib/devise/models/confirmable.rb 中找到代码
使用 after_save 将使您的应用程序运行并检查用户是否刚刚被确认的条件。这将导致不必要的延误。
我建议使用以下代码覆盖设计提供的默认确认功能。
class User < ActiveRecord::Base
devise :invitable, :database_authenticatable, :registerable, :recoverable,
:rememberable, :confirmable, :validatable, :encryptable
# Override devise confirm! message
def confirm!
welcome_email
super
end
# ...
private
def welcome_email
UserMailer.welcome_message(self).deliver
end
end
http://csnipp.com/s/507/-Send-welcome-mail-after-confirmation-devise