Ruby NoMethodError

Buenas, pues estaba arreglando un problema de la página web y me ha surgido un problema que no acabo de entender ya que soy bastante novato en este tema.

El problema es que la página me dice que el método está sin definir, pero sí que lo está. Os adjunto el código a ver si veis qué me pasa.

En esta línea da el error (undefined method 'url_name' for nil:NilClass)

<a href="<%= valoration_url %>">

Ese link lo redirecciona a este método

def valoration_url
    url_for_page :valoration
  end

Que es donde me da el error al llamar al método url_for_page

def url_for_page(page, url_for_options = {})
    page = Page.find_by_key(page.to_s) unless page.is_a?(Page)
    page_url_for_options = {
      :controller => 'pages',
      :action     => 'show',
      :url        => "#{page.url_name}/#{url_for_options.delete(:url)}",
      :key        => nil # to overwrite current key in params
    }
    _page_url_options = page_url_for_options.merge(url_for_options)
    _page_url_options[:only_path] = true
 
    Rails.application.routes.url_for(_page_url_options)
  end

Respuestas

#1

En realidad el problema no es que el método url_name no esté definido, sino que el objeto page es nil. El problema sucede en esta línea de código:

page = Page.find_by_key(page.to_s) unless page.is_a?(Page)

La aplicación no es capaz de encontrar la página cuya clave es valoration. Quizás no exista esa página o haya algún problema en el método find_by_key() de la página.

#2

Gracias por tu respuesta, tenías razón. Al hacer un rake db:reset se me había borrado la página de valoration y no la encontraba.