我正在尝试制作一个简单的rss生成器。我的初始化方法工作正常,更新方法也运行没有错误,但更新方法中的新项目永远不会添加到rss提要。我认为这与我如何访问变量'maker'有关,但我不确定。
require "rss"
class RSS_Engine
def initialize
@rss = RSS::Maker.make("atom") do |maker|
maker.channel.author = "Jamie"
maker.channel.updated = Time.now.to_s
maker.channel.about = "http://www.ruby-lang.org/en/feeds/news.rss"
maker.channel.title = "Example Feed"
@maker = maker
end
end
def update
@maker.items.new_item do |item|
item.title = "Test"
item.updated = Time.now.to_s
end
end
def print_rss
puts @rss
end
end
rss = RSS_Engine.new
rss.update
rss.print_rss
我从这个例子中得到了原始代码:
rss = RSS::Maker.make("atom") do |maker|
maker.channel.author = "matz"
maker.channel.updated = Time.now.to_s
maker.channel.about = "http://www.ruby-lang.org/en/feeds/news.rss"
maker.channel.title = "Example Feed"
maker.items.new_item do |item|
item.link = "http://www.ruby-lang.org/en/news/2010/12/25/ruby-1-9-2-p136-is-released/"
item.title = "Ruby 1.9.2-p136 is released"
item.updated = Time.now.to_s
end
此代码工作正常但我希望能够随着时间的推移向rss Feed中添加新帖子,所以我试图将'new.item'位置放入它自己的方法中。
答案 0 :(得分:1)
问题不是@maker
变量,在从代码块中修改后,必须调用to_feed
方法重新生成Feed。
因此,您需要在@rss = @maker.to_feed
方法的末尾添加update
。
需要设置另一件关于创建新供稿条目的内容, link 或 id 属性。
以下代码适合您:
def update
@maker.items.new_item do |item|
item.link = "http://test.com"
item.title = "Test"
item.updated = Time.now.to_s
end
@rss = @maker.to_feed
end
如果您对原因感兴趣,可以查看ruby rss源代码。下面的代码(在 rss / maker / base.rb 下面)是你需要调用to_feed
方法的根本原因,如果你修改了块的输出:
def make(*args, &block)
new(*args).make(&block)
end
def make
yield(self)
to_feed
end