2009-12-09 175 views
0

我正在使用FeedTools聚合RSS源。 我按照這個教程:http://simonwoodside.com/weblog/2008/12/7/ruby_on_rails_feedrss_aggregator/和一切運作良好。在ruby/rails中過濾哈希中的哈希數組

問題是我想從分析的源哈希內部過濾存在於數組[:項目]中的一些哈希。

這裏是我的數據庫中的RSS緩存飼料對象:

create_table "cached_feeds", :force => true do |t| 
    t.string "uri" 
    t.text  "parsed_feed" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

在腳本/控制檯解析飼料看起來是這樣的:

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"} ] 
} 

正如你可以看到有對parsed_feed兩個散列,:uri和:items。 :items將所有的feed項目細節都藏在一大堆哈希中。

現在讓我們說「Some Title」已經是數據庫中文章的名稱。 RSS提要列表中的項目的目的是告訴用戶哪些RSS提要中的文章尚未上傳到數據庫中,因此我只想在視圖中顯示「另一個標題」。

這種方法在控制做得很好,顯示了不帶過濾器的所有項目:

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 

我試圖插入此代碼.flatten作爲過濾器

.reject {|k,v| website_articles.include? v} 

這會工作後,如果我正在過濾一個正常的散列,但是從一個散列內的散列數組中進行過濾。我錯過了什麼?如何在不顯示「某些標題」的情況下顯示「另一個標題」?

回答

1

@Jordan

我得到了一個零回來時,我做到了。然而,你的回答確實讓我走上了正軌。

做了一些修修補補,顯然我並不需要兩個變量的哈希:

.reject {|item| website_articles.include? item[:feed_item][:title]} 

謝謝你讓我在正確的軌道上!

+0

很高興你明白了! – 2009-12-09 21:27:58

2

由於您拒絕像{ :feed_title => "Some Title", ... }哈希v,這應該工作:

.reject {|k, v| website_articles.include? v[:feed_title] }