Ruby on rails 远程属性的ActiveRecord作用域缓存?

Ruby on rails 远程属性的ActiveRecord作用域缓存?,ruby-on-rails,ruby,caching,scope,rails-activerecord,Ruby On Rails,Ruby,Caching,Scope,Rails Activerecord,我有一个大型项目,有几个单独的数据库实例,数据库名称和不同的表名,都需要在一个Sinatra控制器中处理 像这样的 class ItemLog < ActiveRecord::Base def address http_get('http://x.com/get_address_by_item_type?id=' + self.type_id).to_json['address'] end end 我的问题是,是否有必要为此编写更优雅的代码?作用域缓存类似于{item\u

我有一个大型项目,有几个单独的数据库实例,数据库名称和不同的表名,都需要在一个Sinatra控制器中处理

像这样的

class ItemLog < ActiveRecord::Base
  def address
    http_get('http://x.com/get_address_by_item_type?id=' + self.type_id).to_json['address']
  end
end

我的问题是,是否有必要为此编写更优雅的代码?作用域缓存类似于{item\u type\u id:address\u string}对,但直接在封装的ActiveRecord模型中工作

为什么不将地址保存在数据库中?就像在一个before_create块中一样?@avlazarov显然是因为远程数据库不在我的控制之下。而且它的数据经常更新,没有任何可能的触发机制。所以每次都要有新鲜感
address_cache = Hash[ItemLog.where(...).limit(500).pluck(:type_id).uniq.map {|type_id| [type_id, get_address(type_id)] }]
ItemLog.where(...).limit(500).each { |item| item.address = address_cache[item.type_id }