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,如果这有所作为的话。

4

1 回答 1

1

尝试更改Messaging.after_createMessaging.after_commit.

after_commit提交事务后调用回调,因此这将确保您的Message&记录在您触发该方法Messaging之前存在于数据库中。send_email

于 2013-08-01T17:54:17.270 回答