J'agrège les flux RSS en utilisant FeedTools. J'ai suivi ce tutoriel: http://simonwoodside.com/weblog/2008/12/7/ruby_on_rails_feedrss_aggregator/ et tout a bien fonctionné. Le problème est que je veux filtrer certains des hachages qui existent dans le tableau [: items] de l'intérieur du hachage de feed analysé.Filtrer un tableau de hachage dans un hachage dans ruby / rails
est ici l'objet flux RSS mises en cache dans ma base de données:
create_table "cached_feeds", :force => true do |t|
t.string "uri"
t.text "parsed_feed"
t.datetime "created_at"
t.datetime "updated_at"
end
dans le script/console l'alimentation analysable ressemble à quelque chose comme ceci:
parsed_feed: {:uri => "http://www.someblog.com",
:items =>
[ {:published_at => some date,
:link => "http://www.someblog.com/somelink.html",
:title => "Some Title"},
{:published_at => another date,
:link => "http://www.someblog.com/anotherlink.html",
:title => "Another Title"} ]
}
Comme vous pouvez le voir, il y a deux hash pour parsed_feed ,: uri et: articles. : les éléments ont tous les détails de l'élément de flux cachés dans un grand nombre de hachages.
Dites maintenant que "Some Title" est déjà le nom d'un article dans la base de données. Le but de la liste de flux RSS est de dire à l'utilisateur quels articles de son flux RSS n'ont pas encore été téléchargés dans la base de données, donc je veux seulement que "Un autre titre" apparaisse dans la vue.
Cette méthode dans le contrôleur fait un bon travail montrant tous les éléments sans filtre:
def read_cache
website_articles = @website.article_names.to_a #This would return ["Some Title"]
@@uris = ["#{Website.find(params[:id]).feed}"]
@@uris.map { |uri|
feed = CachedFeed.find_by_uri(uri).parsed_feed
feed[:items].map { |item| {:feed_title => @@title_map[feed[:title]] || feed[:title], :feed_item => item} }
} .flatten.sort_by { |item| item[:feed_item][:published] } .reverse
end
J'ai essayé d'insérer ce code après .flatten comme un filtre
.reject {|k,v| website_articles.include? v}
Cela fonctionnerait si je filtrais un hachage normal, mais filtrer à partir d'un tableau de hachage dans un hachage. Qu'est-ce que je rate? Comment puis-je faire apparaître "Another Title" dans la vue sans que "Some Title" apparaisse?
Heureux que vous l'ayez compris! –