2013-08-01 105 views
0

这里的设置:鸡和蛋电子邮件

我有一个系统与许多帐户,每个用户有很多。系统超级用户可以向所有帐户广播消息。消息表示加入了一个账户和一条消息。

消息after_create将为系统中的每个帐户生成消息。消息传递after_create将通过电子邮件将消息传递给每个帐户的用户。该电子邮件将包含链接,例如“点击这里阅读全文:http://example.com/messages/123

Rails似乎在内存中执行这整个操作,然后在最后一步提交到数据库。大致为:

Message 
    after_create 
    create_messagings 
     ... 
     Messaging 
     after_create 
      send_email 
      "click here! example.com/messages/123" 

      ... 

      commit to database 

什么最终情况是,电子邮件开始得到与URL的消息传递,但不URL直到最后消息传递尚未存在于数据库中。

我不能成为第一个反对这个......任何想法?

目前这个应用程序正在使用Rails 3.0,如果这有所作为。

回答

1

尝试更改Messaging.after_createMessaging.after_commit

交易一直致力于后after_commit回调被调用,所以这将确保您Message & Messaging记录在数据库中存在你触发send_email方法之前。