创建记录时,我发生了三次不同的API调用。
1)调用为记录创建一个bitly URL。 2)呼叫使用有点URL发布到Facebook 3)使用简单的URL
呼叫发布到Twitter我目前的流程如下:
记录创建和更新
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
我面临的问题是,在尚未创建bitly_url的情况下首先调用facebook和twitter帖子。
需要帮助的是弄清楚如何添加这些调用,他们仍然可以按顺序发生这些调用并等待在调用facebook和twitter之前出现bitly_url?值得一提的是,我使用sidekiq进行调用,并将实际调用发送给sidekiq worker,以便在后台工作。
答案 0 :(得分: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回调。它们只会使您的代码更加不透明。