浏览 3674 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-05-23
但是呢,rails3的发送邮件的api发生了些许变化。(详情请看:http://lindsaar.net/2010/1/26/new-actionmailer-api-in-rails-3) 发送的方法上也要做些许的修改。这里以我的代码作为示例,做个示范。 这里的UserMailer大概代码: class UserMailer < ActionMailer::Base default :from => "admin@example.com" def registration_confirmation(user) @user = user mail(:to => "#{user.username} <#{user.email}>", :subject => "注册确认") end end 这个是rails3的ActionMailer,很赞 有了上面的代码,Controller中直接调用 UserMailer.registration_confirmation(@user).deliver就可以发送邮件了 def create @user = User.new(params[:user]) if @user.save UserMailer.registration_confirmation(@user).deliver flash[:notice] = "谢谢您的注册,一封注册确认邮件即将发往邮箱#{@user.email},请注意查收!" redirect_to '/login' else render :action => 'new' end end 但是,现在的代码是直接进行发送的,这使得用户在操作的时候,会卡一下,如果放到后台去发送就不会有这个问题。 在rails的lib目录底下的mailing_job.rb文件内容,做些许的变化 class MailingJob < Struct.new(:notifier_method,:user_id) def perform user = User.find(user_id) UserMailer.send(notifier_method, user).deliver end end 到这里就基本上搞定了,把UserController里的直接发送的代码换成: Delayed::Job.enqueue MailingJob.new(:registration_confirmation, @user.id) delayed_job记得上最新版,gemfile里直接写gem "delayed_job", "2.1.0.pre"就可以了 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |