【问题标题】:Koala batch operations in models模型中的考拉批量操作
【发布时间】:2013-01-31 19:55:30
【问题描述】:

我有一个 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

【问题讨论】:

  • 你想立即填充用户名吗??
  • @checkit 是的。我希望能够根据用户的 uid 显示用户的 facebook 名称

标签: ruby-on-rails ruby koala


【解决方案1】:

使用后台任务(例如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 请求。

【讨论】:

  • 如果用户更改他们的 Facebook 名称会发生​​什么?我怎么知道名称已更新?
  • 如果这让您担心,您可以设置一个 cron 任务 (github.com/javan/whenever) 以在后台启动更新,但您需要经常检查。拥有准确的最新信息通常并不重要,即使是这样,您也可以公开一个“更新”按钮来启动另一个后台任务。例如,您的用户是否会知道它是否每 5 分钟而不是立即更新一次?
猜你喜欢
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-09
  • 2020-09-01
  • 1970-01-01
  • 2015-09-27
  • 2012-12-11
相关资源
最近更新 更多