繁体   English   中英

控制器中的变量进入导轨视图?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM