簡體   English   中英

在ruby / rails中的哈希中過濾一組哈希

[英]Filter an array of hashes within a hash in ruby/rails

我正在使用FeedTools聚合RSS feed。 我遵循了本教程: http : //simonwoodside.com/weblog/2008/12/7/ruby_on_rails_feedrss_aggregator/ ,一切正常。

問題是我想從解析的Feed哈希中過濾掉數組[:items]中存在的某些哈希。

這是我數據庫中的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將所有提要項的詳細信息隱藏在大量哈希中。

現在說“ 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}

如果我正在過濾普通哈希,但從哈希中的哈希數組進行過濾,則此方法有效。 我想念什么? 如何使“另一個標題”出現在視圖中而沒有出現“某些標題”?

由於拒絕中的v{ :feed_title => "Some Title", ... }類的哈希,因此它應該起作用:

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

@約旦

當我這樣做的時候,我得到了零。 但是,您的回答確實使我步入正軌。

做了一些修改,顯然我不需要兩個變量來進行哈希處理:

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

感謝您使我步入正軌!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM