impossible d'accéder au modèle associé à has_one
-
03-07-2019 - |
Question
J'ai deux modèles: Show
et Lieu
. Show a un lieu alors que chaque lieu appartient au spectacle. Cette condition est définie dans les deux fichiers de modèle avec has_one
& amp; Les instructions appartiennent_à
correctement. Cependant, je ne peux pas accéder à la salle en faisant show.venue
. Considérez le code suivant où s est une instance 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("*********************")
Je sens que la ligne qui cause l'erreur MySQL devrait fonctionner. C'est l'erreur:
ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'venues.show_id' in 'where clause': SELECT * FROM `venues` WHERE (`venues`.show_id = 95) LIMIT 1)
Je ne sais pas pourquoi il essaie d'accéder à locaux.show_id
. Des idées?
La solution
Vous avez les clés étrangères inversées. Dans les conventions d'ActiveRecord, la classe avec le appart_to devrait devrait être mappée à la table de la base de données avec la clé étrangère. Voir la API ActiveRecord : " l'association apart_to est toujours utilisée dans le modèle qui a la clé étrangère. " Cela a du sens, si vous réfléchissez à la façon dont appartient_pour interagir avec has_one et has_many (vous ne pouvez évidemment pas insérer les clés étrangères dans le modèle has_many).