0

我有兩種型號:ShowVenue。節目有一個場地,而每個場地都屬於節目。在兩個模型文件中均已正確使用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關聯始終在具有外鍵的模型中使用。」如果您考慮belongs_to與has_one和has_many進行交互的方式(因爲您顯然不能將外鍵放入has_many模型中),這就更有意義了。

+0

我想我有點困惑,因爲我認爲是這樣的: 「如果一個節目有一個場地,那麼一個節目有一個場地標識來引用該場地。」但是我必須開始思考:「如果一場演出的BELONGS參加了一個場地,那麼它必須是BELONGS所在場所的ID。」 – Tony 2009-05-02 02:53:52