如何创建本地记录和远程资源之间的混合 Rails 4 模型



我正在Rails开发一个社交电影应用程序。我不想从头开始使用电影信息数据库,所以我找到了一个免费的社区维护的电影数据库,称为电影数据库(TMDB)。它有一个很好的API和文档。

我将如何设计一个可以与我的用户模型完全关联的 Rails 模型,该模型可以使用我的电影表中的本地记录,但如果该记录不存在,请进行 API 调用以获取信息?

我做了一些研究,听起来ActiveResource可能会做我想要的一部分,但它并没有真正提供与ActiveRecord的关联。

我认为

这取决于您如何查询本地数据库以查看是否有电影,如果没有,则查询 api。理想情况下,您应该在本地(也许在imdb_id字段上)使用 api 中的相同 id,并从那里查询电影:

m = Movie.from_imdb_id(832903820)

哪里:

def self.from_imdb_id(imdb_id)
  m = Movie.where(imdb_id: imdb_id).first
  if m.blank?
    # I dont know how the api queries work so suggesting something here:
    data = RestClient.get("http://api.tmdb.com/movies/#{imdb_id}.json")
    m = Movie.create!(data.merge(imdb_id: imbd_id)
  end
  return m
end

这个怎么样:

Movie.find_or_create_by(imdb_id: imdb_id) do |movie|
  data = RestClient.get("http://api.tmdb.com/movies/#{imdb_id}.json")
  movie.director = data['director']
  .....
end

它会找到一条对应于imdb_id的记录,如果没有,则会创建一个带有块中参数的新记录。

问候!

最新更新