Sasha
Sasha

Reputation: 3281

rails, how to reference action mailer in jquery

i wanted to perform an action mailer method after an ajax method completes. im building a twitter app essentially, and wanted an email notification to be sent after someone clicks 'follow', which is done asynchronously.

i gave the follow button an id

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

and then used jquery

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

});

however, im really sure how i can reference my UserMailer in jquery. ultimately im trying to perform this line after my ajax is complete

UserMailer.is_now_following(@user, current_user).deliver

thanks!

hmmm i tried adding that line of code in my create function (to create the relationship of the follow) but it lags my ajax quite a lot. the ajax is to render the 'unfollow' button after the 'follow' is clicked btw.

  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

i commented it out. is this what you meant for adding it after my ajax call is successful? also, how do you put a job on queue? thanks!

Upvotes: 0

Views: 562

Answers (1)

shingara
shingara

Reputation: 46914

The better solution is doing that only in your server not in your client side.

If you do like you want you need doing 2 requests. 1 to follow people and 1 to launch mail. If you user stop this application between this 2 requests, no email is send.

The better solution is to launch your Mailer directly in your follow action. In your controller, you know if the request is a success or not. If the request is a success launch the email.

If you want more reactivity and avoid doing this job directly in your action, you can push the mailer action to a job queue.

Upvotes: 1

Related Questions