[英]variable from controller into view in rails?
我知道这可能是一个愚蠢的问题。 我正在尝试使用此xml解析器
http://nokogiri.rubyforge.org/nokogiri/Nokogiri.html
我已经将代码放在一个bringRSS方法(?)中的控制器中,并且在IRB中可以正常工作。 但是我如何获取将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
您的方法是不正确的动作? 如果是这样,则“ puts”方法是不合适的。 您应该定义一些可以在视图中访问的全局变量。
@css_content = Array.new
doc.css('h3.r a.l').each do |link|
@css_content << link.content
end
您定义一个@css_content数组,其中包含每个链接。 在您的视图中,您可以像通常在视图中使用它们一样使用该var。
在Rails操作中使用puts将引发异常。
而是仅将数据分配给实例变量,如下所示:
@link_content = []
...
doc.css('h3.r a.l').each do |link|
@link_content << link.content
end
...
您以后可以在视图中使用相同名称访问它
从技术上讲,您可以直接写您的响应,因为它的行为或多或少类似于您puts
IRB中的对象。 但是如上所述,Rails的实现方式是使用控制器分配给实例var,然后使用视图呈现它们。
作为好处,您可以在分配时使用一些非常好的Ruby:
@links = doc.css('h3.r a.l').map{|link|link.content}
就像上面一样,将映射每个对象的content
方法返回的content
。 而且由于Rails通过为符号对象提供to_proc方法来扩展它,因此您可以将其缩短为
@links = doc.css('h3.r a.l').map(&:content)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.