2015-10-20 20 views
6

Ben sayfanın oluşturulmasına sonra uzaktan hizmet isteğinde bulunmanız gerekirİşleme sonrası yöntem nasıl çağrılır?

Benim denetleyicisi: Ben şablon olmuştur sonra

+0

Bunu neden yapmanız gerektiğinden emin değil misiniz? Neden aranması gerektiğine dair daha fazla bilgi verebilir misiniz? Bu eylemi, istemci tarafında oluşturulduktan sonra tetikleyen js aracılığıyla bir api çağrısı yapabilirsiniz. – penner

+0

Uzak sunucuda istekte bulunmak biraz zaman alır ve bu eylemi arka planda çağırmam gerekir, örneğin: twitter api üzerinden tweet gönderme –

cevap

9

after_filter çalıştırılan sayfanın oluşturulmasına sonra remote_action yöntemini çağırmanız gerekir

after_filter :remote_action, only: :update 

def update 
    @res = MyService.do_action foo, bar 
    return render json: @res[:json], status: @res[:status] unless @res[:success] 
end 

def remote_action 
    # There is remote http request 
end 

html'ye dönüştürülür, ancak'dan önce html istemciye bir yanıt olarak gönderilir. Yani, uzak bir http isteği yapmak gibi yavaş bir şey yapıyorsanız, o zaman bu uzak isteğin bitmesini beklemesi gerektiği için yanıtınızı yavaşlatacaktır: başka bir deyişle, uzak istek yanıtınızı engelleyecektir.

engellemeyi önlemek için, farklı bir iş parçacığı kapalı çatal olabilir: Bu kullanma

https://github.com/tra/spawnling

de bakabilirsiniz, sadece

def remote_action 
    Spawnling.new do 
    # There is remote http request 
    end 
end 

uzaktan çağrı olacak şekilde kodunuzu değiştirecek yanıt geri gönderilmeden önce tetiklenir, ancak yeni bir iş parçacığına dönüştürüldüğü için, yanıt, uzaktan isteğin geri gelmesini beklemez, hemen gerçekleşir.

Ayrıca, ayrı bir işlemin bunları çekip yürüteceği bir veritabanı tablosuna iş koyan https://github.com/collectiveidea/delayed_job'a da bakabilirsiniz.

+0

Teşekkür ederiz! İşe yaradı! –

+0

Harika! Cevabımı doğru olarak işaretlemekte özgürsünüz :) –

İlgili konular