2

我正在使用设计和 actionmailer。我想知道如何在用户在应用程序上确认他的帐户之后而不是之前触发 actionmailer 方法。这个 actionmailer 方法只不过是一条欢迎消息。

另外,我如何获取相同的用户信息,例如姓名或电子邮件?我试过了resource。但它没有用。

4

5 回答 5

2

这实际上是一个相对容易的任务。您需要做的就是为您的 User 类创建一个观察者

class UserObserver < ActiveRecord::Observer
    def after_save(user)            
        if user.confirmed_at_changed?
            #send email
        end
    end
end
于 2013-05-24T13:33:09.687 回答
1

Rails 3:使用 Devise 发送欢迎电子邮件有一个很好的答案,你可以做类似的事情

class User < ActiveRecord::Base
  devise # ...
  # ...
  def confirm!
    welcome_message # define this method as needed
    super
  end
  # ...
end
于 2013-05-24T13:15:22.477 回答
1

这做到了。

after_save :send_welcome_email
  def send_welcome_email
    WelcomeEmail.notify(self).deliver if self.confirmed_at_changed?
  end
于 2013-05-24T13:25:07.330 回答
1

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 中找到代码

于 2017-04-10T08:10:03.037 回答
0

使用 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

于 2014-07-11T20:20:44.680 回答