0

私は2種類のモデル:ShowVenueを持っています。各会場がショーに所属している間、ショーは1つの会場を有する。この状態は両方のモデルファイルで定義されており、has_one & belongs_toステートメントが正しく記述されています。しかし、show.venueで会場にアクセスできません。私はMySQLのエラーが動作するはず原因となるラインのように感じる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("*********************") 

:sがShowインスタンスで、次のコードを考えてみましょう。私はvenues.show_idにアクセスしようとしている理由はわかりません

ActiveRecord::StatementInvalid (Mysql::Error: Unknown column 'venues.show_id' in 'where clause': SELECT * FROM `venues` WHERE (`venues`.show_id = 95) LIMIT 1) 

:これはエラーです。何か案は?

答えて

6

外部キーが逆転しています。 ActiveRecordの規則では、belongs_toを持つクラスは外部キーを持つデータベーステーブルにマップする必要があります。 ActiveRecord APIを参照してください: "belongs_to結合は、常に外部キーを持つモデルで使用されます。"これは、belongs_toがhas_oneとhas_manyの両方とやりとりする方法について考えるならば、意味があります(あなたが明らかにhas_manyモデルに外部キーを入れることはできません)。

+0

私はこのように考えるとちょっと混乱していると思います。 「ショーには会場があり、ショーにはその会場を参照するvenue_idがあります。」しかし、私は "会場にショーがあれば、会場のイドはそれに続く必要があります"と考え始めなければなりません。 – Tony

関連する問題