Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在用户确认其帐户后发送欢迎电子邮件_Ruby On Rails_Ruby On Rails 3_Devise_Actionmailer - Fatal编程技术网

Ruby on rails 在用户确认其帐户后发送欢迎电子邮件

Ruby on rails 在用户确认其帐户后发送欢迎电子邮件,ruby-on-rails,ruby-on-rails-3,devise,actionmailer,Ruby On Rails,Ruby On Rails 3,Devise,Actionmailer,我正在使用Desive和actionmailer。我想知道在用户在应用程序上确认了他的帐户之后,而不是在这个actionmailer方法只是一条欢迎消息之前,我如何触发actionmailer方法 另外,如何获取sames用户的信息,如姓名或电子邮件?我尝试了资源。但是它不起作用。有一个很好的答案 你可以这样做 class User < ActiveRecord::Base devise # ... # ... def confirm! welcome_message

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

另外,如何获取sames用户的信息,如姓名或电子邮件?我尝试了
资源
。但是它不起作用。

有一个很好的答案 你可以这样做

class User < ActiveRecord::Base
  devise # ...
  # ...
  def confirm!
    welcome_message # define this method as needed
    super
  end
  # ...
end
class用户
就是这样

after_save :send_welcome_email
  def send_welcome_email
    WelcomeEmail.notify(self).deliver if self.confirmed_at_changed?
  end

这实际上是一项相对容易的任务。您所需要做的就是为您的用户类创建一个

class UserObserver < ActiveRecord::Observer
    def after_save(user)            
        if user.confirmed_at_changed?
            #send email
        end
    end
end
class UserObserver
使用after_save将使应用程序运行,并检查用户是否刚刚确认。这将导致不必要的延误

我建议使用以下代码覆盖DeVICE提供的默认确认功能

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
class用户

对于这种情况,Desive有一个内置回调

    # 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

你可以在designe/lib/designe/models/confirmable.rb中找到代码。在确认后用谷歌搜索
,designe
会找到一些好文章,因此你可能想从这些文章开始。是的,但它会随确认电子邮件一起发送。那不是我想要的。我希望在用户确认他/她的帐户后发送
,因为从Rails 4开始,观察员已经被转移到他们自己的gem,出于中详述的原因,我会寻找观察员的替代方案。