no se puede acceder al modelo relacionado con has_one
-
03-07-2019 - |
Pregunta
Tengo dos modelos: Show
y Venue
. El show tiene un lugar mientras que cada lugar pertenece al show. Esta condición se define en ambos archivos de modelo con has_one
& amp; pertenece a las instrucciones
correctamente. Sin embargo, no puedo acceder al lugar haciendo show.venue
. Considere el siguiente código donde s es una instancia de Show
:
logger.info("*********************")
logger.info("#{s.inspect}")
logger.info("#{Venue.find(s.venue_id)}") # Works
logger.info("#{s.venue}") # Causes a MySQL Error
logger.info("*********************")
Siento que la línea que causa el error de MySQL debería funcionar. Este es el error:
ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'venues.show_id' in 'where clause': SELECT * FROM `venues` WHERE (`venues`.show_id = 95) LIMIT 1)
No tengo idea de por qué está intentando acceder a venues.show_id
. ¿Alguna idea?
Solución
Tienes las claves foráneas invertidas. En las convenciones de ActiveRecord, la clase con belongs_to debe asignarse a la tabla de la base de datos con la clave externa. Consulte la API de ActiveRecord : " El modelo que tiene la clave externa. " Esto tiene algún sentido, si piensa en la forma en que pertenece_para interactuar con has_one y has_many (ya que obviamente no puede poner las claves externas en el modelo has_many).