Ruby TMDB API Сохранить фильм в базе данных

Я использую драгоценный камень ruby ​​tmdb для поиска фильмов из TMDB. У меня настроен ключ API, и я знаю, как найти фильм в консоли rails.

Итак, скажем, я запускаю это @movies = TmdbMovie.find(:title => 'The Social Network') в rails console. Это возвращает целую кучу информации о вышеупомянутом фильме Социальная сеть.

Что мне нужно знать, так это то, как я могу сохранить возвращенную информацию о фильме в свою базу данных и, возможно, создать новый фильм на основе возвращенной информации.

Допустим, он запустил @movies = TmdbMovie.find(:title => 'The Social Network'), и консоль вернет этот View Gist на Github< /эм>

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


person PMP    schedule 04.07.2013    source источник


Ответы (2)


Предполагая, что у вас есть модель, настроенная для хранения этих данных, вы можете сделать:

@movies.each do |movie|
  # assumes @movies is an array
  # inside this loop, "movie" refers to the current TMDB movie object
  YourMovie.where({
    description: movie.description,
    trailer: movie.trailer,
    title: movie.title
  }).first_or_create
end

YourMovie — это просто ссылка на то, что вы хотите назвать своей моделью фильма; в вашем случае (с таблицей БД с именем movies) это будет Movie.

Если у вас еще нет настроенной модели ActiveRecord, вы можете легко создать ее: rails g model YourMovie description trailer movie.

Если вам действительно не нужно хранить фильм в вашей локальной базе данных и вы просто хотите предотвратить постоянное обращение к службе API, вы можете использовать низкоуровневое кэширование Rails:

Rails.cache.fetch('The Social Network', expires_in: 24.hours) do
  @movies = TmdbMovie.find(:title => 'The Social Network')
end
person Jacob Brown    schedule 05.07.2013
comment
Если у меня уже есть таблица Movies с моделью? Что такое Ваше кино? потому что в вашем коде есть movies и yourmovie. Куда пойдет первый фрагмент кода? Куда пойдет последний кусок кода? А что, если мне нужно добавить и сохранить несколько фильмов с разными названиями? - person PMP; 05.07.2013
comment
Я обновил свой ответ, чтобы ответить на ваши первые пару вопросов. Где вы запускаете этот код, зависит от того, что вы пытаетесь сделать? Вы хотите сами загружать элементы в базу данных или просто хотите, чтобы они загружались, когда пользователь ищет заголовок (т. е. в контроллере). Вы можете запустить обе части кода из Rails console, если хотите. - person Jacob Brown; 05.07.2013
comment
Я бы предпочел, чтобы он был сохранен в моей базе данных - person PMP; 05.07.2013
comment
Итак, какой код я бы использовал и как бы я сохранил его в своей базе данных? - person PMP; 06.07.2013
comment
Первый кодовый блок; если вы настроили его правильно, этот блок сохранит все фильмы в @movies в вашей базе данных. - person Jacob Brown; 06.07.2013
comment
Будет ли этот код отображаться на странице show.html.erb для фильмов? Я спрашиваю, какой код я должен запустить, чтобы получить фильм из TMDB и сохранить его в моей базе данных. - person PMP; 06.07.2013
comment
Вероятно, нет show.html.erb. Где вы загружаете @movies? Будет ли поиск по заголовку в вашем примере создан из пользовательской формы? - person Jacob Brown; 06.07.2013
comment
Я хочу выполнить запрос, получить фильм из TMDB и сохранить его в моей базе данных, этот фильм будет таким же, как если бы я создал его сам на странице new.html.erb, он будет иметь действие уничтожения, редактирования и показа - person PMP; 06.07.2013
comment
Я пытаюсь добиться того же, что и PMP. Но мне немного трудно понять ваш код. Не могли бы вы привести пример поля поиска, которое вы бы использовали, чтобы соответствовать коду создания? - person Peter Boomsma; 03.10.2014

Я не уверен, разрешено ли вам по закону сохранять данные tmdb в вашей собственной базе данных. Вам нужно время от времени нажимать на их API, чтобы получать информацию о фильме или кэшировать ее. Вы не должны сохранять его в своей базе данных .... Решение, предоставленное kardeiz, - это путь ....

person rails4sandeep    schedule 25.07.2013