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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top