0

我正在使用 rakefile 从一个网站获取信息并将其保存到我的数据库中。

使用 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都是独一无二的

如何让 rakefile 检查返回的电影的 tmdb_id 是否唯一,如果已经有具有该 ID 的电影,则跳过并保存下一部电影。

我在我的电影模型中尝试过,validates_uniqueness_of :tmdb_id但是在运行 rake 命令时它会出错并且它不保存电影。

基本上,我怎样才能通过 rakefile 验证 tmdb_id 的唯一性

这是我的 rake 文件

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!确实如此。关键是使用在验证失败时不会引发错误的保存方法。

编辑 - 现在我了解您实际上想要做什么,您应该能够执行以下操作:

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 回答