2012-04-06 48 views
0

我想在ajax方法完成後執行動作郵件程序方法。在本質上建立一個twitter應用程序,並希望在有人點擊「跟隨」後發送電子郵件通知,這是異步完成的。rails,如何在jquery中引用動作郵件程序

我給後續的按鈕的ID

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

,然後使用jQuery的

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

}); 

但是,我真的知道如何我可以引用我的UserMailer jQuery中。最終我嘗試我的AJAX後執行這條線是完整的

UserMailer.is_now_following(@user, current_user).deliver 

的感謝!

嗯我試圖在我的創建函數中添加該行代碼(創建後續關係),但它滯後於我的ajax相當多。 ajax是在點擊「跟隨」之後渲染'unfollow'按鈕。

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

ajax方法是通過在您的網站上或Twitter網站上點擊一下來調用的? – 2012-04-06 07:05:11

+0

它在我的網站 – Sasha 2012-04-07 09:30:26

回答

1

更好的解決方案是隻在你的服務器上,而不是在你的客戶端。

如果你喜歡你想要的,你需要做2個請求。 1跟隨人和1發射郵件。如果用戶在這兩個請求之間停止此應用程序,則不會發送電子郵件。

更好的解決方案是直接在你的關注動作中啓動你的梅勒。在您的控制器中,您知道請求是否成功。如果請求成功啓動電子郵件。

如果您想要更多反應性並避免直接在您的操作中執行此作業,可以將郵件程序操作推送到作業隊列中。

+0

我試着做你建議的解決方案,但它仍然滯後於我的ajax。我做得對嗎?我在我的帖子中提出了代碼。你如何將郵件程序放在工作隊列上?謝謝! – Sasha 2012-04-07 09:29:49

+0

您需要將此代碼放入隊列系統(如resque或delayed_job)以避免此延遲 – shingara 2012-04-07 09:41:09

+0

謝謝!我把這行代碼放在了delayed_job中,它並沒有落後於應用程序。謝謝! – Sasha 2012-04-08 22:04:44

相關問題