rails回调和订单或事件
问题描述:
创建记录时发生三种不同的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和Twitter发布被称为上先救w ^这里bitly_url尚未创建。
需要帮助的是弄清楚如何添加这些调用,他们仍然可以发生,但他们发生的顺序,并等待bitly_url出现在Facebook和Twitter的调用之前?值得一提的是,我使用sidekiq进行调用并将实际调用发送给sidekiq工作人员以在后台工作。
答
在控制器:
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的回调应该尽可能地避免。他们只是让你的代码更加不透明。
如果由于任何原因sidekiq工作人员失败,是否不会一次又一次地调用Facebook和Twitter的帖子? – 2014-09-02 07:20:38
取决于你如何写作业。 – 2014-09-02 18:05:19
完全按照你的建议。到目前为止似乎工作。感谢您的帮助。 – 2014-09-02 18:22:14