我知道这可能是一个愚蠢的问题。我正在尝试使用这个xml解析器
http://nokogiri.rubyforge.org/nokogiri/Nokogiri.html
我已经将下面的代码放在了一个带有RSS方法(?)的控制器中,它在IRB中工作正常。但是如何将 puts link.content 的值添加到我的视图中
def bringRSS
require 'nokogiri'
require 'open-uri'
# Get a Nokogiri::HTML:Document for the page we’re interested in...
doc = Nokogiri::HTML(open('http://www.google.com/search?q=tenderlove'))
# Do funky things with it using Nokogiri::XML::Node methods...
####
# Search for nodes by css
doc.css('h3.r a.l').each do |link|
puts link.content
end
####
# Search for nodes by xpath
doc.xpath('//h3/a[@class="l"]').each do |link|
puts link.content
end
####
# Or mix and match.
doc.search('h3.r a.l', '//h3/a[@class="l"]').each do |link|
puts link.content
end
end
答案 0 :(得分:3)
你的方法是一个rails动作?如果是这样,“puts”方法是不合适的。您应该定义一些可在视图中访问的全局变量。
@css_content = Array.new
doc.css('h3.r a.l').each do |link|
@css_content << link.content
end
您定义了一个@css_content数组,其中包含您的每个链接。 在您的视图中,您可以使用该var,就像您通常在视图中使用它一样。
答案 1 :(得分:1)
在Rails操作中使用puts会引发异常。
而只是将数据分配给实例变量,如下所示:
@link_content = []
...
doc.css('h3.r a.l').each do |link|
@link_content << link.content
end
...
您可以稍后在视图中使用相同的名称访问它
答案 2 :(得分:1)
从技术上讲,您可以直接写入您的响应,因为它的行为或多或少类似于您在IRB中puts
的对象。但如上所述,Rails的做法是使用控制器分配实例变量和视图来渲染它们。
作为一个好处,你可以在分配时使用一些非常好的Ruby:
@links = doc.css('h3.r a.l').map{|link|link.content}
将映射每个对象的content
方法返回的内容,就像您上面所做的那样。由于Rails通过为符号对象提供to_proc方法来扩展它,您可以将其缩短为
@links = doc.css('h3.r a.l').map(&:content)