Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.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 Rails 3:使用Desive发送欢迎电子邮件_Ruby On Rails_Ruby On Rails 3_Devise - Fatal编程技术网

Ruby on rails Rails 3:使用Desive发送欢迎电子邮件

Ruby on rails Rails 3:使用Desive发送欢迎电子邮件,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,当用户注册到我的服务时,我如何发送欢迎电子邮件 另外,我如何从designe更改电子邮件:发件人和:主题字段 谢谢查看您的配置/devise.rb 您可以更改区域设置文件中的主题(config/locales/designe.en.yml)我通过覆盖designe的confirm完成了更改!方法: class用户

当用户注册到我的服务时,我如何发送欢迎电子邮件

另外,我如何从designe更改电子邮件:发件人和:主题字段


谢谢

查看您的配置/devise.rb


您可以更改区域设置文件中的主题(config/locales/designe.en.yml)

我通过覆盖designe的confirm完成了更改!方法:

class用户
这是一次很棒的讨论。按照benoror的建议重写该方法将非常有效。如果您认为您可能想要捕获其他用户事件,那么正如其他一些人在其他地方所建议的那样,Observer类可能是最干净的方法。此解决方案适用于Rails 3.0.x和3.1

要设置观察者,请对应用程序文件进行以下更改,将此观察者添加到您可能已经拥有的任何其他观察者中

#config/application.rb
config.active_record.observers = :user_observer
然后在models目录中创建一个新文件:

#app/models/user_observer.rb
class UserObserver < ActiveRecord::Observer 
  def after_create(user)
    Notifier.user_new(user).deliver
  end  
end
您的environments/test.rb应具有以下设置以构建邮件阵列,而不是发送:

config.action_mailer.delivery_method = :test
config.action_mailer.perform_deliveries = true
不用说,您可以在消息中测试更多的内容(to、from等),但如果您愿意的话,这将以BDD的方式开始

另请参阅一些了解此问题的旧StackOverflow线程,包括:

我不能使用“批准”答案,因为我没有使用Desive的:可确认

我不喜欢其他解决方案,因为您必须使用模型回调,即使您在控制台或管理界面中创建他的帐户,它也会始终发送欢迎电子邮件。我的应用程序能够从CSV文件中批量导入用户。我不希望我的应用程序一个接一个地向所有3000人发送一封惊喜电子邮件,但我确实希望创建自己帐户的用户收到一封欢迎电子邮件。 解决方案:

1) 覆盖设备的注册控制器:

#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

  def create
    super
    UserMailer.welcome(resource).deliver unless resource.invalid?
  end

end
# routes.rb
devise_for :users, controllers: { registrations: "registrations" }

当然,您可以调整“UserMailer”和“Desive_for:users”以匹配您正在使用的型号名称。

如果您没有使用:confirmable怎么办?如果它不是:comfirmable,我会使用相同的方法,但称之为:创建后,为了让它与Desive for non users一起工作,您需要使用
资源
来代替:
RegistrationsMailer.welcome(resource).deliver if resource.persistend?
在这句话中,即使用户注册未完成,邮件也会被发送。不,这很正常。
除非@user.invalid?
确保在注册完成之前邮件不会被发送。
#registrations_controller.rb
class RegistrationsController < Devise::RegistrationsController

  def create
    super
    UserMailer.welcome(resource).deliver unless resource.invalid?
  end

end
# routes.rb
devise_for :users, controllers: { registrations: "registrations" }