incapaz de modelo de acesso relacionado com has_one
-
03-07-2019 - |
Pergunta
Eu tenho dois modelos: Show
e Venue
. Show tem um local enquanto cada local pertence a mostrar. Esta condição é definida em ambos os arquivos modelo com has_one
& belongs_to
declarações corretamente. No entanto, eu não sou capaz de acessar o local, fazendo show.venue
. Considere o seguinte código onde s é um exemplo 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("*********************")
Eu me sinto como a linha que causa o erro MySQL deve funcionar. Este é o erro:
ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'venues.show_id' in 'where clause': SELECT * FROM `venues` WHERE (`venues`.show_id = 95) LIMIT 1)
Eu não tenho idéia por que está tentando acessar venues.show_id
. Alguma idéia?
Solução
Você tem as chaves estrangeiras revertida. Em convenções do Active Record, a classe com o belongs_to deve mapear a tabela de banco de dados com a chave estrangeira. Veja a ActiveRecord API : "A associação belongs_to é sempre usado na modelo que tem a chave estrangeira." Isso faz algum sentido, se você pensar sobre a maneira que belongs_to interage com ambos has_one e has_many (como você obviamente não pode colocar as chaves estrangeiras no modelo has_many).