0

Ich habe zwei Modelle: Show und Venue. Show hat einen Veranstaltungsort, während jeder Veranstaltungsort zu Show gehört. Diese Bedingung ist in beiden Modelldateien mit has_one & belongs_to Anweisungen richtig definiert. Ich kann jedoch nicht auf den Veranstaltungsort zugreifen, indem ich show.venue mache. Betrachten Sie den folgenden Code, wo s eine Show Beispiel:Zugriff auf Modell nicht möglich has_one

logger.info("*********************") 
logger.info("#{s.inspect}") 
logger.info("#{Venue.find(s.venue_id)}") # Works 
logger.info("#{s.venue}") # Causes a MySQL Error 
logger.info("*********************") 

ich wie die Linie fühlen, dass die MySQL-Fehler verursacht funktionieren sollte. Dies ist der Fehler:

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

Ich habe keine Ahnung, warum es versucht venues.show_id zuzugreifen. Irgendwelche Ideen?

Antwort

6

Sie haben die Fremdschlüssel umgekehrt. In den Konventionen von ActiveRecord sollte die Klasse mit dem Zugehörigkeitsschlüssel to der Datenbanktabelle mit dem Fremdschlüssel zugeordnet werden. Siehe die : "Die Associates-Zugehörigkeit wird immer in dem Modell verwendet, das den Fremdschlüssel hat." Dies ergibt einen gewissen Sinn, wenn Sie daran denken, dass es sich bei sounds_mit has_one und has_many verhält (da Sie die Fremdschlüssel natürlich nicht in das has_many-Modell einfügen können).

+0

Ich denke, ich bin ein bisschen verwirrt, weil ich denke so: "Wenn eine Show einen Veranstaltungsort hat, dann hat eine Show eine Location_id, um diesen Veranstaltungsort zu verweisen." Aber ich muss anfangen zu denken: "Wenn eine Show zu einem Veranstaltungsort gehört, muss sie die ID des Veranstaltungsortes haben, dem sie gehört." – Tony

Verwandte Themen