2014-09-01 1 views
0

У меня есть три разных вызова API, возникающих при создании записи.rails обратные вызовы и заказы или события

1) Позвоните, чтобы создать битовый URL для записи. 2) Позвоните, чтобы отправлять сообщения в Facebook с Bitly URL 3) Позвоните, чтобы получить возможность отправлять в твиттер с Bitly URL

Мой текущий процесс выглядит следующим образом:

На записи Создание и обновление

respond_to do |format| 
    if @dealer.save 
    call_bitly_api 
    end 
end 

в моей модели:

after_save :social_media_posting 

def social_media_posting 
    if (self.bitly_url.present? && self.posted_to_facebook == false) 
    call_facebook_post 
    end 
    if (self.bitly_url.present? && self.posted_to_twitter == false) 
    call_twitter_post 
    end 
end 

вопрос, который я столкнулся в том, что facebook и твиттер сообщения вызываются на первом сохранить вес здесь bitly_url еще не создан.

Нужна помощь в том, как добавить эти вызовы, которые они все еще могут случиться, но они происходят по порядку и ждут, когда bitly_url будет присутствовать до вызова facebook и twitter? Главное, что стоит упомянуть, я использую sidekiq для совершения звонков и отправки фактического вызова сотруднику sidekiq для работы в фоновом режиме.

ответ

1

В контроллере:

CallBitlyWorker.perform_async(dealer.id) 

В вашем работника:

class CallBitlyWorker 
    include Sidekiq::Worker 
    def perform(dealer_id) 
    dealer = Dealer.find(dealer_id) 
    # make bitly call 
    dealer.update_attribute(:bitly_url, some_url) 

    # make the social media calls in parallel 
    CallFacebook.perform_async(dealer_id) 
    CallTwitter.perform_async(dealer_id) 
    end 
end 

ActiveRecord обратные вызовы следует избегать, где это возможно. Они просто делают ваш код более непрозрачным.

+0

Если работник sidekiq не работает по какой-либо причине, не будет ли он снова и снова звонить на фейсбук и твиттер? –

+0

Зависит от того, как вы пишете задание. –

+0

Следуя именно тому, как вы предложили. До сих пор, похоже, работает. Спасибо за помощь. –