Domanda

Ho due modelli: Show e Venue . Lo spettacolo ha una sede mentre ogni sede appartiene allo spettacolo. Questa condizione è definita in entrambi i file modello con has_one & amp; appartiene_to correttamente. Tuttavia, non sono in grado di accedere al luogo facendo show.venue . Considera il seguente codice dove s è un'istanza 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("*********************")

Sento che la linea che causa l'errore MySQL dovrebbe funzionare. Questo è l'errore:

ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'venues.show_id' in 'where clause': SELECT * FROM `venues` WHERE (`venues`.show_id = 95)  LIMIT 1)

Non ho idea del perché stia provando ad accedere a venues.show_id . Qualche idea?

È stato utile?

Soluzione

Le chiavi esterne sono invertite. Nelle convenzioni di ActiveRecord, la classe con appartiene_to deve essere mappata alla tabella del database con la chiave esterna. Vedi API ActiveRecord : " L'associazione appartiene_ a viene sempre utilizzata in il modello che ha la chiave esterna. " Questo ha un senso, se pensi al modo in cui appartiene_interagisce sia con has_one che has_many (dato che ovviamente non puoi mettere le chiavi esterne nel modello has_many).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top