Perché mi appare nullo per un rapporto belongs_to in Rails?
-
24-09-2019 - |
Domanda
Sto avendo un problema nella mia Ruby on Rails app con un modello in cui un rapporto belongs_to continua finendo con l'essere pari a zero.
Dati i seguenti modelli:
class Chassis < ActiveRecord::Base
belongs_to :model
belongs_to :chassis_size
end
class Model < ActiveRecord::Base
has_many :chassis
end
class ChassisSize < ActiveRecord::Base
has_many :chassis
end
Ora, mi aspetto a mio avviso indice telaio vorrei vedere sia il modello ei dati forniti chassis_size:
<% @chassis.each do |chassis| %>
<%= chassis.id %><br />
<%= chassis.model.name %><br />
<%= chassis.chassis_size.size %><br />
<% end %>
ma ottengo un errore che il chassis_size.size è pari a zero:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.size
Guardando i dati nel database, tutto sembra essere corretto.
Non so il motivo per cui il modello funziona, ma chassis_size non lo fa. Che cosa mi manca? Perché i dati chassis_size non appare a carico?
Soluzione
La dimensione è una colonna della tabella chassis_sizes?
Se è così, questo è una parola riservata in rubino, in quanto è il metodo per restituire la lunghezza di un array.
fa ogni chassis ha un chassis_size? Prova questo:
<% @chassis.each do |chassis| %>
<%= chassis.id %><br />
<%= chassis.model.name %><br />
<% if chassis.chassis_size %>
<%= chassis.chassis_size.description %>
<% else %>
No chassis_size exists for this chassis
<% end %><br />
<% end %>