0

我想在 ajax 方法完成后执行一个动作邮件方法。我本质上构建了一个 twitter 应用程序,并希望在有人点击“关注”后发送电子邮件通知,这是异步完成的。

我给了关注按钮一个ID

<%= f.submit "Follow", :class => "btn btn-large btn-primary", 
        :id => "follow_button"%>

然后用jquery

$("#follow_button").bind('ajax:success', function() {

});

但是,我真的很确定如何在 jquery 中引用我的 UserMailer。最终我试图在我的 ajax 完成后执行这一行

UserMailer.is_now_following(@user, current_user).deliver

谢谢!

嗯,我尝试在我的创建函数中添加那行代码(以创建跟随关系),但它落后于我的 ajax 很多。ajax 是在单击“关注”后呈现“取消关注”按钮。

  def create
    @user = User.find(params[:relationship][:followed_id])
    current_user.follow!(@user)
    respond_to do |format|
        format.html {redirect_to @user}
        format.js
    end

    #UserMailer.is_now_following(@user, current_user).deliver
  end

我把它注释掉了。这是我的ajax调用成功后添加它的意思吗?另外,您如何将工作放在队列中?谢谢!

4

1 回答 1

1

更好的解决方案是只在您的服务器而不是在您的客户端这样做。

如果你愿意,你需要做 2 个请求。1个关注人,1个启动邮件。如果您的用户在这 2 个请求之间停止此应用程序,则不会发送电子邮件。

更好的解决方案是直接在您的后续操作中启动您的邮件程序。在您的控制器中,您知道请求是否成功。如果请求成功,则启动电子邮件。

如果您想要更多的反应性并避免直接在您的操作中执行此作业,您可以将邮件操作推送到作业队列。

于 2012-04-06T07:47:43.150 回答