3

我有一个用户模型(带有设计)和一个属于用户的帖子模型。创建帐户后,我使用此 railscast (pro)向用户发送电子邮件

我创建了一个“NewPostMailer”

这是我的邮件:

class NewPostMailer < ActionMailer::Base
  default :from => "email@gmail.com"

  def new_post_email(user)
    @user = user
    @url = "http://localhost.com:3000/users/login"
    mail(:to => user.email, :subject => "New Post")
   end
end

我的posts_controller:

  def create
    @post= Post.new(params[:post])

    respond_to do |format|
      if @deal.save
        NewPostMailer.new_post_confirmation(@user).deliver
        format.html { redirect_to @post, notice: 'Post was successfully created.' }

post.rb

  after_create :send_new_post_email

  private
  def send_new_post_email
    NewPostMailer.new_post_email(self).deliver
  end

在用户创建帖子后,我必须更改哪些内容才能向用户发送电子邮件。谢谢。

4

2 回答 2

13

创建另一个邮件程序(http://railscasts.com/episodes/206-action-mailer-in-rails-3

 class YourMailerName < ActionMailer::Base
     default :from => "you@example.com"

   def post_email(user)
    mail(:to => "#{user.name} <#{user.email}>", :subject => "Registered")
   end
 end

在您的 Post 模型中

 after_create :send_email

 def send_email
   YourMailerName.post_email(self.user).deliver
 end

发送电子邮件非常慢,因此请考虑将其置于后台作业中。

于 2012-12-07T00:59:39.780 回答
3

您应该能够使用非常相似的方法来执行此操作。首先,在你的模型中创建一个after_create 回调Post,类似于:

after_create :send_user_notification

def send_user_notification
  UserMailer.post_creation_notification(user).deliver
end

您需要确保用户和帖子之间存在关系,并post_creation_notification在您的 中创建方法,UserMailer就像您创建旧方法一样。可能还值得指出的是,像这样盲目地发送电子邮件不一定是最好的方法。它不仅为请求增加了额外的不必要的时间,而且它也不会以优雅的可恢复方式失败。您可能希望探索将要发送到队列(例如,像这样)的电子邮件添加到要处理的队列中,使用 cron 作业或其他东西,如果您正在创建的站点将看到除非常少量使用之外的任何内容。

于 2012-12-07T00:58:31.227 回答