1

Ich arbeite an einer sozialen Film App in Rails. Ich möchte nicht bei einer Datenbank mit Filminfos von vorne anfangen, also habe ich eine kostenlose und gemeinschaftsgepflegte Filmdatenbank namens The Movie Database (TMDB) gefunden. Es hat eine gute API und Dokumentation.Wie erstelle ich ein Rails 4-Modell, das eine Mischung aus lokalen Datensätzen und Remote-Ressourcen ist?

Wie würde ich ein Rails-Modell entwerfen, das vollständig meinem Benutzermodell zugeordnet werden kann, das einen lokalen Datensatz aus meiner Filmtabelle verwenden kann, aber wenn dieser Datensatz nicht vorhanden ist, einen API-Aufruf durchführen?

Ich habe ein wenig Forschung und es klingt wie ActiveResource könnte tun, was ich will, aber es bietet nicht wirklich Assoziationen mit ActiveRecord.

Antwort

1

Ich denke, es hängt davon ab, wie Sie Ihre lokale Datenbank abfragen, um zu sehen, ob ein Film dort ist, und wenn nicht, die API abzufragen. Idealerweise sollten Sie die gleichen IDs aus der api verwenden lokal (vielleicht auf einem imdb_id Feld?) Und Abfrage-Filme von dort:

m = Movie.from_imdb_id(832903820) 

wo:

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

Das ist ziemlich genau das, was ich mir ausgedacht habe. Ich war hauptsächlich neugierig, ob es andere Möglichkeiten gab, die ich in Betracht ziehen sollte, besonders, weil ich ActiveResource nicht sehr gut kenne, was ziemlich genau das zu tun scheint, was ich möchte, außer ActiveRecord-Modellen. –

0

Wie wäre es damit:

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 

Es würde einen Datensatz finden, der imdb_id entspricht, wenn nicht, würde ein neuer Datensatz mit den Parametern im Block erstellt.

Grüße!

Verwandte Themen