0

두 모델이 있습니다 : ShowVenue. 쇼는 각 장소가 쇼에 속하는 동안 하나의 장소를 가지고 있습니다. 이 조건은 has_one & belongs_to 문을 사용하여 두 모델 파일에 모두 정의됩니다. 그러나 show.venue을 통해 공연장에 입장 할 수 없습니다.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의 오류가 작동해야됩니다 라인 같은 느낌 : S는 Show 인스턴스에 다음 코드를 고려하십시오. 이것은 오류입니다 :

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

외래 키가 취소되었습니다. 액티브 레코드의 규칙에서는 belongs_to가있는 클래스가 외래 키가있는 데이터베이스 테이블에 매핑되어야합니다. ActiveRecord API : "belongs_to 연관은 항상 외래 키가있는 모델에서 사용됩니다." belongs_to가 has_one과 has_many와 상호 작용하는 방식을 생각하면 (이는 분명히 has_many 모델에 외래 키를 넣을 수 없으므로) 약간의 의미가 있습니다.

+0

나는 이렇게 생각하기 때문에 약간 혼란 스럽다. "쇼에 장소가 있다면 쇼에 해당 장소를 참조하는 venue_id가 있습니다." 그러나 나는 생각하기 시작해야만한다. "공연장 옆에 쇼가 있다면, 그 장소의 이드가 있어야한다." – Tony

관련 문제