2012-04-06 2 views
0

Я хотел выполнить метод почтовой программы действия после завершения метода ajax. im создать приложение для Twitter, по сути, и хотел, чтобы уведомление по электронной почте было отправлено после того, как кто-то нажимает «follow», что выполняется асинхронно.рельсы, как ссылаться на action mailer в jQuery

я дал кнопку Следование идентификатор

<%= 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 

спасибо!

hmmm Я попытался добавить эту строку кода в свою функцию create (чтобы создать взаимосвязь между ними), но она значительно отстает от моего ajax. ajax должен отобразить кнопку «unfollow» после нажатия кнопки «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 

Я прокомментировал это. это то, что вы хотели добавить после того, как мой аякс-вызов будет успешным? также, как вы помещаете работу в очередь? благодаря!

+0

Является ли метод ajax вызванным следующим щелчком на вашем сайте или на сайте Twitter? –

+0

это на моем сайте – Sasha

ответ

1

Лучшее решение делает это только на вашем сервере не на вашей стороне клиента.

Если вы делаете то, что хотите, вам нужно сделать 2 запроса. 1 следить за людьми и 1 запускать почту. Если пользователь останавливает это приложение между этими двумя запросами, ни одно письмо не отправляется.

Лучшим решением является запуск вашего Mailer непосредственно в вашем действии. В вашем контроллере вы знаете, является ли запрос успешным или нет. Если запрос успешно отправит электронное письмо.

Если вы хотите больше реактивности и не выполняете это задание непосредственно в своем действии, вы можете нажать действие почтовой программы в очередь заданий.

+0

Я попытался сделать решение, которое вы предложили, но он значительно отстает от моего ajax. я делаю это правильно? Я вставил код в свой пост. как вы помещаете действие почтовой программы в очередь заданий? благодаря! – Sasha

+0

Вам нужно поместить этот код в систему очередей, например resque или delayed_job, чтобы избежать этой задержки – shingara

+0

спасибо! Я помещаю эту строку кода в delayed_job, и она вообще не отстает от приложения. Спасибо! – Sasha

Смежные вопросы