2017-10-20 9 views
0

私はRuby on Rails RSSリーダーをPostgreSQLデータベースと一緒に使っています。現時点では、既存のフィードと適切に同期しますが、既にデータベースにある記事を繰り返し表示しているようです。私はデータベースにまだない記事を繰り返してみたいと思います。誰かが私のsync.rakeタスクでそれを正しく行うにはどうすればいいのか理解できますか?ありがとう!どのようにRailsのRSSリーダーsync.rakeタスクの重複を減らすには?

namespace :sync do 
    task feeds: [:environment] do 
     Feed.all.each do |feed| 
      content = Feedjira::Feed.fetch_and_parse feed.url 
      content.entries.each do |entry| 
       local_entry = feed.articles.where(title: entry.title).first_or_initialize 
       text = Nokogiri::HTML(open(entry.url)) 
       local_entry.update_attributes(content: text, author: entry.author, url: entry.url, published: entry.published) 
       p "Synced Entry - #{entry.title}" 
      end 
      p "Synced Feed - #{feed.name}" 
     end 
    end 
end 

答えて

0

私はあなたのデータベースに保存されている最新の出版物を、見つけるためにpublishedフィールドを使用することができると信じています。

だからあなたのような何かを実行することができます

last_entry = feed.articles.last 
content.entries.reject { |e| e.published < last_entry.published } 

を、その後に新しいエントリを作成するために、フィルター処理されたコレクションを反復処理します。