переменная из контроллера в поле зрения? - PullRequest
0 голосов
/ 12 октября 2009

Я знаю, что это может быть глупый вопрос. Я пытаюсь использовать этот xml-парсер

http://nokogiri.rubyforge.org/nokogiri/Nokogiri.html

Я поместил приведенный ниже код в контроллер в методе yieldRSS (?), И он отлично работает в 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

Ответы [ 3 ]

3 голосов
/ 12 октября 2009

Ваш метод - действие рельсов? Если так, то метод «пут» неуместен. Вы должны определить некоторые глобальные переменные, которые будут доступны в представлении.

@css_content = Array.new
doc.css('h3.r a.l').each do |link|
    @css_content << link.content
end

Вы определяете массив @css_content, который содержит все ваши ссылки. И, по вашему мнению, вы можете использовать эту переменную так же, как вы обычно используете их в представлениях.

1 голос
/ 12 октября 2009

Технически, вы можете написать прямо в свой ответ, так как он ведет себя более или менее как объект, к которому вы puts обращаетесь в IRB. Но, как уже упоминалось выше, способ Rails сделать это - использовать контроллер для назначения экземплярам vars и ваше представление для их рендеринга.

В качестве преимущества вы сможете использовать действительно хороший 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)
1 голос
/ 12 октября 2009

Использование put в действии Rails вызовет исключение.

Вместо этого просто назначьте данные переменной экземпляра, например:

@link_content = []
...
doc.css('h3.r a.l').each do |link|
    @link_content << link.content
end
...

Вы можете получить к нему доступ позже в ваших представлениях с тем же именем

...