1

Я работаю над приложением для социальных фильмов в Rails. Я не хочу начинать с нуля в базе данных о фильме, поэтому я нашел бесплатную и поддерживаемую сообществом базу данных фильмов под названием «База данных фильмов» (TMDB). Он имеет хороший API и документацию.Как создать модель Rails 4, которая является гибридом между локальными записями и удаленными ресурсами?

Как создать модель Rails, которая может быть полностью связана с моей моделью пользователя, которая может использовать локальную запись из моей таблицы фильмов, но если этой записи нет, сделайте вызов API для получения информации?

Я сделал небольшое исследование, и похоже, что ActiveResource может сделать часть того, что я хочу, но на самом деле он не предлагает ассоциации с ActiveRecord.

ответ

1

Я думаю, что это зависит от того, как вы запрашиваете свою локальную базу данных, чтобы посмотреть, есть ли фильм, а если нет, запрос на 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, если нет, создаст новую с параметрами в блоке.

С уважением!

Смежные вопросы