从外部Web服务获取JSON - 尝试重构/整理我的代码

时间:2011-07-10 06:25:28

标签: ruby-on-rails json ruby-on-rails-3

我有一个Podcast模型,其中包含一个名为:url 的属性。

典型的:url 采用以下格式:http://api.mixcloud.com/alivefrommaryhill/jazzcast/并返回JSON文件

使用hashie和httparty,我们可以编写一个方法(称为 get_json ),该方法使用此URL从链接到的JSON创建哈希:

class Podcast < ActiveRecord::Base
  attr_accessible :url  

  def get_json
    Hashie::Mash.new HTTParty.get("#{self.url}")
  end   
end

然后我们可以在视图中使用 get_json 来设置和显示JSON:

#/views/podcasts/index.html.haml
- for podcast in @podcasts  
  = link_to podcast.get_json.name, podcast_path(podcast)
  = podcast.get_json.description
  = image_tag podcast.get_json.pictures.medium

如您所见,每个播客都会调用 get_json 三次。我有21个播客,并且不希望每次访问多次调用此方法,因为它连接到外部Web服务非常耗时。如何最小化调用此方法的次数并加快速度?

也许我应该在我的控制器中做更多事情而不是从我的视图中调用方法?

def index
  @podcasts = Podcast.all
end

任何帮助表示赞赏

1 个答案:

答案 0 :(得分:2)

嗯,现在最简单的解决方法是将podcast.get_json的结果保存在局部变量中。每个播客都会减少一次。

如果您想进一步减少通话次数,则必须想办法批量处理所有请求。我不知道该网站的API是否会让你这样做。