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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top