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的回调应该尽可能地避免。他们只是让你的代码更加不透明。

+0

如果由于任何原因sidekiq工作人员失败,是否不会一次又一次地调用Facebook和Twitter的帖子? – 2014-09-02 07:20:38

+0

取决于你如何写作业。 – 2014-09-02 18:05:19

+0

完全按照你的建议。到目前为止似乎工作。感谢您的帮助。 – 2014-09-02 18:22:14