2013-01-31 44 views
1

我有一個Ruby on Rails應用程序,允許用戶使用他們的Facebook帳戶登錄。我想要能夠列出用戶及其Facebook數據。我已經能夠做到這一點,但我必須發送一個請求,每個用戶的名稱,我想這樣做的批處理操作。我將如何能夠將其放入我的用戶模型中?模型中的考拉批量操作

用戶模型

class User < ActiveRecord::Base 
    attr_accessible :uid 

    def facebook_name 
    Koala::Facebook::API.new.get_object(uid)["name"].to_s 
    end 
end 

的低效代碼

users = Users.all 

users.each do |user| 
    puts user.facebook_name 
end 
+0

你是否想立即填充用戶名? – codeit

+0

@checkit是的。我希望能夠根據用戶的用戶名顯示用戶的Facebook名稱 –

回答

4

實施例使用一個後臺任務(例如https://github.com/collectiveidea/delayed_job)來填充在數據庫中的數據。

例如

class User 
after_create :delayed_populate 

def populate_from_facebook 
    self.facebook_name = Koala::Facebook::API.new.get_object(uid)["name"].to_s 
end 

def delayed_populate 
    delay.populate_from_facebook 
end 
end 

然後,一旦你做到了這一點,它只是一個普通的模型數據庫,通過這些迭代,因爲字段將在您的數據庫緩存。您真的不希望在響應另一個HTTP請求期間發出HTTP api請求。

+0

如果用戶更改他們的Facebook名稱,會發生什麼情況?我如何知道名稱更新? –

+0

如果您擔心這一點,您可以設置一個cron任務(https://github.com/javan/whenever)在後臺啓動更新,不過您需要經常檢查。精確到分鐘的信息通常並不重要,即使是這樣,你也可以暴露一個「更新」按鈕來啓動另一個後臺任務。例如,您的用戶是否會知道它是否每5分鐘更新一次而不是立即更新? –