2015-08-25 86 views
0

我想在我的用戶模型中創建一個回調。在創建用戶之後,會啓動回調以運行get_followers以獲取該用戶的Twitter關注者(通過完整聯繫API)。Rails:來自回調方法的HTTP獲取請求(模型中)

這一切都有點新的給我...

這是正確的做法把請求回調還是應在控制器的地方?然後,我如何向rails中的端點發出請求,以及我應該在哪裏處理返回的數據?

編輯...是這樣的事情好嗎?

User.rb

require 'open-uri' 
require 'json' 

class Customer < ActiveRecord::Base 
    after_create :get_twitter 

    private 

    def get_twitter 
    source = "url-to-parse.com" 
    @data = JSON.parse(JSON.load(source)) 
    end 

回答

1

有幾件事情要考慮:

  • 回調將爲創建的每個客戶,而不僅僅是那些在控制器中創建運行。根據您的具體需求,這可能會也可能不會是理想的。例如,您將需要通過嘲笑外部API調用來在測試中處理此問題。
  • 如果服務關閉或返回錯誤響應,回調中可能出現錯誤。你必須決定如何處理這些錯誤。
  • 如果不需要立即運行,您應該考慮讓回調中的代碼在後臺進程中運行,而不是在Web請求中運行。這樣回調中的錯誤不會產生500頁,並且會提高性能,因爲響應可以在不等待回調完成的情況下返回。在這種情況下,應用程序的其餘部分必須能夠處理回調尚未完成的用戶。
+0

您可以指出我如何在請求完成後讓回調代碼在後臺運行的正確方向嗎?這聽起來很理想。謝謝 –

+0

從這裏開始:http://edgeguides.rubyonrails.org/active_job_basics.html。然後你需要選擇一個後端,如Sidekiq或Resque。 – zetetic

+0

太棒了。謝謝 –