0

每当在我的应用程序中创建模型时,都会向几个人发送一封电子邮件。对模型创建的响应是 JS,因此在更新页面时会有一点延迟,因为首先所有电子邮件都被发送,然后 JS 视图逻辑启动(即在按下 Create 按钮和按下 Create 按钮的时间之间存在明显的延迟当页面自行更新时)。

有没有办法可以设置我的控制器,以便在视图完成更新后发送电子邮件?

这是我的控制器操作基本上如下所示:

def create
  @model = Model.new(params[:model])
  @model.save

  @followers.each do |f|
    ModelMailer.some_email(f).deliver
  end

  respond_to do |format|
    format.js { render :layout => false }
  end
end
4

2 回答 2

2

您可以使用 DelayJob 或其他后台工作人员来执行此操作并添加handle_asynchronously :deliver到您的邮件中。

于 2012-06-18T07:07:44.263 回答
2

我赞成 Hauleth 的回答,因为这是处理发送邮件的正确方法。

另一种选择是在系统运行时向用户提供反馈。这是一种 UI 设计模式,有各种名称,如“加载”和“处理”。简而言之:在发送请求之前在客户端设置一条消息,然后在响应完成时更新该消息成功或失败,这本身可以超时,因此消息是临时的。

如果操作是远程的,也就是 ajax,那么您应该始终应用此 UI 模式。

如果该操作正在呈现一个全新的页面,那么当您知道响应可能很慢时它很有用,就像您的情况一样。

于 2012-06-18T15:00:20.137 回答