неопределенный метод `css 'для nil: NilClass - PullRequest
0 голосов
/ 17 января 2011

Я получаю эту ошибку в моем приложении Rails и не могу найти решение.Я добавлю код из класса, где он терпит неудачу.Это может быть скорее архитектурной проблемой, если вы так думаете, пожалуйста, скажите, и я добавлю больше кода из других классов.У меня есть только эта модель, один контроллер и другой класс, который находится в lib.Тогда вид конечно.Заранее спасибо!

  #app/models/news_api.rb
  require 'open-uri'

  class NewsApi
    URL = "http://www.mysomething.com/partner/api/1_0/somerandomnumber/
          channel/290/material/list/"

  def self.download
   new.document.css('news').map {|node| record(node) } 
  end

  def document
    Nokogiri::XML(open(URL)) 
    puts URL.to_s
  end

  def record(node)
    Story.new(node_to_hash(node)) 
  end

  def node_to_hash(node)
    Hash[Story::ATTRIBUTES.collect {|attribute| [attribute, text(node, attribute)] }]
  end

  def text(node, selector)
   node.css(selector).text
  end
end

@ idlefingers: Вот код, на мой взгляд.В основном я использую Nokogiri для анализа некоторых XML-данных из API, а затем отображаю ответ в HTMl на мой взгляд.

<ul id="news">
 <% @stories.each do |story| %>
 <li class=" <%= story.type_of_media %>">
  <h2><%= link_to story.header, story.url %></h2>
  <p class="permalink"><%= link_to 'Trackback', story.url %></p>
  <p class="meta">
    <strong><%= story.source_name %></strong>
    <br/>
    <%= story.created_at %>
    <br/>
    <%= story.geo %>
  </p>
  <p class="summary"><%= story.summary %></p>
 </li>

<% end%>

1 Ответ

2 голосов
/ 17 января 2011

Откуда исходит ошибка?На первый взгляд, похоже, что он исходит из метода .document, но это не ясно.Можете ли вы добавить обратную трассировку ошибки?

Метод .document в том виде, в каком он есть, будет возвращать результат puts URL.to_s, который будет равен нулю.Вам просто нужно переключиться между двумя строчками в вашем .document методе по внешнему виду ...

def document
  puts URL.to_s
  Nokogiri::XML(open(URL)) 
end
...