Вопрос

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

Я чувствую, что строка, которая вызывает ошибку 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 . Есть идеи?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top