我將多個專案組合成一個 RSS 檔案,像這樣迭代它們:
# create RSS
atom = RSS::Maker.make('atom') do |f|
f.channel.updated = Date.today.to_s
# iterate through Ideas
ideas[0,50].each do |r|
f.items.new_item do |e|
e.updated = DateTime.parse(r[:date].to_s).to_s
e.title = r[:title]
e.content.type = 'html'
end
end
# iterate through Articles
articles[0,50].each do |r|
f.items.new_item do |e|
e.updated = DateTime.parse(r[:date].to_s).to_s
e.title = r[:title]
e.content.type = 'html'
end
end
end
但是檔案中專案的順序不是按日期排序的(因為我回圈遍歷第一批“想法”然后“文章”)
我在迭代后嘗試按date/updated值排序,使用以下組合:
# f.items.sort {|a,b| a.updated <=> b.updated}
# atom.items.sort! {|a,b| a.date <=> b.date}
# f.items.reverse!
# f.items.sort_by(&:date)
# f.sort_by(&:date)
但沒有成功。
我是否需要再次遍歷 RSS 中的每個專案來對它們進行排序?
uj5u.com熱心網友回復:
我會將兩個陣列合并為一個items陣列,然后在迭代之前對該陣列進行排序:
atom = RSS::Maker.make('atom') do |f|
f.channel.updated = Date.today.to_s
items = ideas.first(50) articles.first(50)
items = items.sort_by { |item| item[:date] }
# iterate through all items
items.each do |r|
f.items.new_item do |e|
e.updated = DateTime.parse(r[:date].to_s).to_s
e.title = r[:title]
e.content.type = 'html'
end
end
end
請注意,這是可行的,因為兩種型別 (articles和ideas) 具有相同的屬性并以相同的方式呈現到 RSS 中。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/436759.html
