Forum: Rails-ES Error inesperado relaciones entre clases

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-02-12 18:29
Muy buenas, estoy retomando mi proyecto que deje aparc ado por los
examenes. Me he puesto a "pulir" un poco las vistas de lso distintos
elementos que conforman mi aplicacion y me he encontrado con un error
que me ha sorprendido mucho. Os explicoen que consiste con un ejemplo:

Tengo una serie de incidencias que pueden tener varios productos, esot
lo relacionno en el modelo don belongs/has_many de la siguiente forma:

class Incidence < ActiveRecord::Base
  belongs_to:user
  belongs_to:incidence_state
  belongs_to:incidence_product
  belongs_to :client
  belongs_to :zonacliente

######
class IncidenceProduct < ActiveRecord::Base

  has_many :incidences
end

#######
Es decir tengo una tabla incidences con todos los campos de las
incidencias y otra incidence_products con una columna llamada title que
contiene el producto sobre la cual se abre la incidencia.

Lo que quiero hacer es mostrar en la vista del index de la incidencia el
producto sobre el que trata esta, para ello hago:

...
<td><%=h incidence.incidence_product.title %>
...

Pero para mi sorpresa el navegador me arroja el siguiente error:

NoMethodError in Incidences#index

Showing incidences/index.html.erb where line #33 raised:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.title

Extracted source (around line #33):

30: <% for incidence in @incidences %>
31:  <tr class="<%=cycle('odd','par')%>">
32:     <td><%=h incidence.user_id %></td>
33:     <td><%=h incidence.incidence_product.title %></td>
34:     <td><%=h incidence.client_id %></td>
35:     <td><%=h incidence.state_id %></td>
36:     <td><%=h incidence.created_at.to_s(:short) %></td>


Es como si la tabla de incidence_products no contuviera nada, pero eso
no es posible porque esta rellenada con todos los productos que pueden
causar la incidencia a traves de una migracion.

La migracion es algo asi:
class AddSpIncidenceProducts < ActiveRecord::Migration
  def self.up
    IncidenceProduct.create(:pid=>1,:title =>"")

  IncidenceProduct.create(:pid=>2,:title =>"Aria Soho")

   IncidenceProduct.create(:pid=>3,:title =>"CS 1000")

   IncidenceProduct.create(:pid=>4,:title =>"DataOffice")

  end

  def self.down
  end
end


No se por donde puede venir el error :(
0fdce938a28a604fd5613a68b0d78fcb?d=identicon&s=25 Jose vicente Ribera pellicer (joripel)
on 2009-02-12 18:51
Me respondo a mi mismo.

Pase a modo consola:

incidence=Incidence.find(27)
=> #<Incidence id: 27, user_id: 1, incidence_product_id: nil, client_id:
0, state_id: 1, contact: "ñññññññññ", telephone: "ñññññññ", 
email: "",
subject: "", description: "", solution: "", created_at: "2008-12-04
16:46:46", updated_at: "2008-12-04 16:46:46", res_method_id: nil,
related: nil, reference: nil, ir: "", send_email: 0, level: "yellow">

El campo incidence_product_id esta a nil, desde el gestor de la base de
datos limpie todas las incidencias creadas, abri una nueva introduciendo
ya el producto y funciona perfectamente.

Un saludo ;)
This topic is locked and can not be replied to.