1

我正在研究Rails中的社交電影應用程序。我不希望從頭開始關於電影信息的數據庫,所以我找到了一個名爲The Movie Database(TMDB)的免費和社區維護的電影數據庫。它有一個很好的API和文檔。如何創建混合了本地記錄和遠程資源的Rails 4模型?

我該如何設計一個Rails模型,它可以與我的用戶模型完全關聯,可以使用我的電影表中的本地記錄,但如果該記錄不存在,請進行API調用以獲取信息?

我做了一點研究,聽起來像ActiveResource可能做我想要的一部分,但它並沒有提供與ActiveRecord的關聯。

回答

1

我認爲這取決於你如何查詢你的本地數據庫,看看電影是否存在,如果沒有,查詢api。理想情況下,你應該在本地使用相同的ID從API(也許在imdb_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 
+0

這幾乎是我想出來的。我大多好奇,是否應該考慮其他方式,尤其是因爲我對ActiveResource不太熟悉,似乎除了與ActiveRecord模型相關外,我似乎都做了我想做的事情。 –

0

如何:

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的記錄,如果沒有,將創建一個帶有塊中參數的新記錄。

問候!

相關問題