2017-10-20 6 views
0

J'ai travaillé sur un lecteur RSS Ruby on Rails avec une base de données PostgreSQL. À l'heure actuelle, il se synchronise correctement avec les flux existants, mais il semble réitérer sur les articles qu'il a déjà dans la base de données. Je voudrais seulement parcourir les articles que je n'ai pas encore dans la base de données. Quelqu'un peut-il m'aider à comprendre comment faire correctement cela avec ma tâche sync.rake, illustrée ci-dessous? Merci!Comment faire pour réduire la duplication dans Rails RSS lecteur sync.rake tâche?

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 

Répondre

0

Je crois que vous pouvez utiliser le champ published pour trouver la publication la plus récente, qui est stocké dans votre base de données.

Vous pouvez exécuter quelque chose comme:

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

Et après itérer sur la collection filtrée pour créer de nouvelles entrées.