AnA*_*ice 0 ruby-on-rails ruby-on-rails-3
我有以下内容:
def create
@permission = @project.permissions.create(params[:permission])
respond_to do |format|
if @permission.save
format.js
else
format.js { render :js => @permission.errors }
end
end
end
Run Code Online (Sandbox Code Playgroud)
我想添加一个Mailer,让用户知道他们已被添加到项目中,问题是,如果我在respond_to之前发布,那么记录还没有被保存,所以有可能出现问题但是用户仍然会收到一封电子邮件.
UserMailer.xxxxxxxxx_notification(objecthere).deliver
Run Code Online (Sandbox Code Playgroud)
而且我猜我不能把邮件放在respond_to块中.建议?
这就是观察者所使用的.
创建 app/models/permission_observer.rb
class PermissionObserver < ActiveRecord::Observer
def after_create(permission)
# put your mailer code here
end
end
Run Code Online (Sandbox Code Playgroud)
在config/application.rb添加观察者
config.active_record.observers = :permission_observer
Run Code Online (Sandbox Code Playgroud)
你可以阅读更多关于观察员这里.
此外,您应该使用@project.permissions.new而不是创建.create会立即保存模型,使您的@permission.save呼叫变得多余.
一旦你有了这个,你应该考虑使你的邮件代码异步,这样它就不会阻止web请求.这是使用delayed_job 的示例.
| 归档时间: |
|
| 查看次数: |
51 次 |
| 最近记录: |