Ruby 试图访问块内的变量

Ruby 试图访问块内的变量,ruby,rss,Ruby,Rss,我正在尝试制作一个简单的rss生成器。我的initialize方法工作正常,update方法运行时也没有错误,但是update方法中的新项从未添加到rss提要中。我认为这与我如何访问变量“maker”有关,但我不确定 require "rss" class RSS_Engine def initialize @rss = RSS::Maker.make("atom") do |maker| maker.channel.author = "Jamie" mak

我正在尝试制作一个简单的rss生成器。我的initialize方法工作正常,update方法运行时也没有错误,但是update方法中的新项从未添加到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提要中添加新帖子,因此我尝试将“new.item”位放入它自己的方法中。

问题不在于
@maker
变量,您必须调用
to_feed
方法在修改完代码块后重新生成提要

因此,您需要将
@rss=@maker.to_feed
添加到
update
方法的末尾

关于创建新的提要条目、链接或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

不要在Ruby代码中使用制表器。如果你在更新方法的第一行添加一个
p@maker
,会打印什么?我得到大约100行代码。首先是#我知道这必须是简单的事情。非常感谢。