2012-04-06 7 views
0

Ich wollte eine Aktion Mailer-Methode nach Abschluss einer Ajax-Methode durchführen. Ich habe im Wesentlichen eine Twitter-App erstellt und wollte eine E-Mail-Benachrichtigung senden, nachdem jemand auf "Folgen" geklickt hat, was asynchron erfolgt.Schienen, wie Action-Mailer in Jquery zu referenzieren

gab ich die Follow-Taste eine ID

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

und verwendet dann jquery

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

}); 

aber im wirklich sicher, wie ich meine UserMailer in jquery verweisen können. Letztendlich versuche ich diese Linie zu führen, nachdem mein Ajax fertig ist.

UserMailer.is_now_following(@user, current_user).deliver 

danke!

hmmm Ich habe versucht, diese Codezeile in meiner create-Funktion hinzuzufügen (um die Beziehung der Folge zu erstellen), aber es bleibt meinem Ajax ziemlich viel hinterher. Der Ajax soll den 'unfollow' Button rendern, nachdem 'follow' angeklickt wurde.

ich habe es auskommentiert. Ist das das, was du meinst, um es hinzuzufügen, nachdem mein Ajax-Ruf erfolgreich war? auch, wie stellst du einen Job in die Warteschlange? Vielen Dank!

+0

Wird die Ajax-Methode durch einen Klick auf Ihrer Site oder auf der Twitter-Site aufgerufen? –

+0

es ist auf meiner Website – Sasha

Antwort

1

Die bessere Lösung ist das nur auf Ihrem Server, nicht auf Ihrer Client-Seite.

Wenn Sie möchten, dass Sie wollen, müssen Sie 2 Anfragen. 1 um Leuten zu folgen und 1 um Mail zu starten. Wenn der Benutzer diese Anwendung zwischen diesen beiden Anfragen beendet, wird keine E-Mail gesendet.

Die bessere Lösung ist, Ihren Mailer direkt in Ihrer Folgeaktion zu starten. In Ihrem Controller wissen Sie, ob die Anfrage erfolgreich ist oder nicht. Wenn die Anfrage erfolgreich ist, starten Sie die E-Mail.

Wenn Sie mehr Reaktionsfähigkeit wünschen und vermeiden, diesen Job direkt in Ihrer Aktion auszuführen, können Sie die Mailer-Aktion in eine Job-Warteschlange schieben.

+0

ich versuchte, die Lösung zu tun, die Sie vorgeschlagen, aber es bleibt mein Ajax viel noch. mache ich es richtig? Ich habe den Code in meinem Post eingefügt. Wie stellst du die Mailer-Aktion in eine Job-Warteschlange? Vielen Dank! – Sasha

+0

Sie müssen diesen Code in ein Warteschlangensystem wie resque oder delayed_job setzen, um diese Latenz zu vermeiden – shingara

+0

danke! Ich stelle diese Codezeile in einen delayed_job und die Anwendung wird nicht verzögert. Danke! – Sasha