0

У меня есть две модели: Show и Venue. Шоу имеет одно место, в то время как каждое место принадлежит шоу. Это условие определено в обоих файлах модели с правильными has_one & belongs_to. Однако я не могу получить доступ к месту проведения, выполнив show.venue. Рассмотрим следующий код, где s является Show экземпляр:не может получить доступ к модели, связанной с 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("*********************") 

Я чувствую, как линия, которая вызывает ошибку MySQL должен работать. Это ошибка:

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

Я понятия не имею, почему он пытается получить доступ к venues.show_id. Есть идеи?

ответ

6

У вас есть внешние ключи в обратном порядке. В соглашениях ActiveRecord класс с атрибутом belongs_to должен сопоставляться с таблицей базы данных с внешним ключом. См. Раздел «ActiveRecord API»: «Ассоциация belongs_to всегда используется в модели с внешним ключом». Это имеет некоторый смысл, если вы думаете о том, каким образом to belongs_to взаимодействует как с has_one, так и с has_many (поскольку вы, очевидно, не можете поместить внешние ключи в модель has_many).

+0

Я думаю, я немного смутился, потому что я так думаю: «Если на шоу есть место, тогда на шоу есть место встречи, чтобы указать, что место встречи». Но я должен начать думать: «Если шоу BELONGS в место проведения, это должен быть идентификатор места, к которому он ПРИНИМАЕТ». – Tony