2012-04-06 4 views
0

ajaxメソッドが完了した後で、アクションメーラーメソッドを実行したかったのです。本質的にTwitterアプリを構築し、誰かが「follow」をクリックした後に電子メール通知を送信することを希望しました。これは非同期で行われます。rails、jqueryでアクションメーラーを参照する方法

私は、しかし、フォローボタン私はjqueryの中で私のUserMailerを参照することができますどのように本当にわからイムをID

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

して使用jqueryの

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

}); 

を与えました。最終的に私のAjaxの後に、この行を実行しようとしているイム

UserMailer.is_now_following(@user, current_user).deliver 

おかげで完了です!

hmmm私の作成関数でコードの行を追加しようとしましたが(次の関係を作成するために)、私のajaxはかなり遅れています。 ajaxは、 'follow'がクリックされた後に '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メソッドが呼び出されますか? –

+0

それは私のサイトにあります – Sasha

答えて

1

より良い解決策は、クライアント側にないサーバーでのみ行うことです。

あなたが好きなら、2つのリクエストをする必要があります。 1人をフォローし、1人がメールを立ち上げる。この2つのリクエストの間にこのアプリケーションを停止すると、電子メールは送信されません。

より良い解決策は、あなたのフォローアクションであなたのメーラーを直接起動することです。あなたのコントローラでは、リクエストが成功したかどうかを知ることができます。リクエストが成功した場合は、電子メールを起動します。

さらに反応性を高め、アクションで直接このジョブを実行しないようにするには、メーラーアクションをジョブキューにプッシュできます。

+0

あなたが提案した解決策をやってみましたが、私のajaxはまだまだ遅れています。私はそれを正しくしていますか?私は私のポストにコードを載せました。メーラー・アクションをジョブ・キューにどのように置くのですか?ありがとう! – Sasha

+0

このレイテンシを避けるには、このコードをresqueやdelayed_jobのようなキューシステムに入れる必要があります。 – shingara

+0

ありがとうございます!私はdelayed_jobにそのコード行を置き、アプリケーションにはまったく遅れません。ありがとうございました! – Sasha

関連する問題