试图访问块内的变量

时间:2014-08-13 21:24:23

标签: ruby rss

我正在尝试制作一个简单的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'位置放入它自己的方法中。

1 个答案:

答案 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