我想在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是在点击'follow'之后呈现'取消关注'按钮。 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调用成功后添加它的意思吗?
还有,你怎么把工作放在队列上?谢谢!
答案 0 :(得分:1)
更好的解决方案是仅在您的服务器中执行此操作,而不是在客户端。
如果您喜欢,您需要做2个请求。 1跟随人和1发送邮件。如果您在这2个请求之间停止此应用程序,则不会发送任何电子邮件。
更好的解决方案是直接在您的跟进操作中启动您的Mailer。在您的控制器中,您知道请求是否成功。如果请求成功,则启动电子邮件。
如果您想要更多反应并避免直接在您的操作中执行此作业,则可以将邮件程序操作推送到作业队列。