rails回调和订单或事件

时间:2014-09-01 20:08:06

标签: ruby-on-rails-3 callback sidekiq

创建记录时,我发生了三次不同的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,以便在后台工作。

1 个答案:

答案 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回调。它们只会使您的代码更加不透明。