0

rakefile を使用して 1 つの Web サイトから情報を取得し、データベースに保存しています。

TMDB-Gem を使用して、このコード@movie = TmdbMovie.browse(:order_by => "release", :order => "asc", :page => 1, :per_page => 2, :language => "en", :expand_results => true)は最も古い映画 ( :order_by => "release") を参照し、それらをデータベースに保存しますが、このレーキを頻繁に実行するため、返される映画と保存される映画は同じになります。

すべての映画には独自性がありtmdb_id、すべてidがユニークです

返されたムービーの tmdb_id が一意であることを rakefile で確認し、その ID を持つムービーが既に存在する場合はスキップして次のムービーを保存するにはどうすればよいですか。

ムービー モデルで試してみましたvalidates_uniqueness_of :tmdb_idが、rake コマンドを実行するとエラーが発生し、ムービーが保存されません。

基本的に、rakefile を使用して tmdb_id の一意性を検証するにはどうすればよいですか

これは私のレーキファイルです

namespace :db do 

task :pull_tmdb_data => :environment do 

Tmdb.api_key = "API KEY" 



Tmdb.default_language = "en" 

  @movie = TmdbMovie.browse(:order_by => "release", :order => "asc", :page => 1, :per_page => 2, :language => "en", :expand_results => true)



@movie.each do |movie| 

Movie.create(title: movie.name, description: movie.overview, release_date: movie.released, tmdb_id: movie.id) 

end 



end 

end
4

1 に答える 1

1

あなたはvalidates_uniqueness_of :tmdb_idあなたのMovieモデルで使用する権利があります。ムービーをデータベースに保存する方法は示されてい.saveませんが、検証が失敗しても例外は発生しません.save!。重要なのは、検証が失敗したときにエラーを発生させない save メソッドを使用することです。

編集 - あなたが実際にやろうとしていることを理解したので、次のようなことができるはずです:

per_page = 100
number_of_movies = Movie.count
page = number_of_movies/per_page+1
@movies = TmdbMovie.browse(:order_by => "release", :order => "asc", :page => page, :per_page => per_page, :language => "en", :expand_results => true) browses the oldest movies (:order_by => "release")

したがって、すでに 435 本の映画を取得している場合、次の呼び出しでは 400 ~ 500 の映画のみが返されます。オプションがあるかどうかわからなかったので、この方法で実行しましたが、offsetオプションがある場合はオフセットすることができます。によるクエリMovie.count、これはより良いでしょう。

于 2013-07-28T14:08:39.930 に答える