has_oneに関連するモデルにアクセスできません
-
03-07-2019 - |
質問
Show
と Venue
の2つのモデルがあります。ショーには1つの会場があり、各会場はショーに属します。この条件は、両方のモデルファイルで has_one
&で定義されています。 belongs_to
ステートメントが適切に。ただし、 show.venue
を実行して会場にアクセスすることはできません。 sが 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("*********************")
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
にアクセスしようとしている理由がわかりません。アイデアはありますか?
解決
外部キーが逆になっています。 ActiveRecordの規約では、belongs_toを持つクラスは、外部キーを持つデータベーステーブルにマップする必要があります。 ActiveRecord API を参照してください:" belongs_toアソシエーションは常に外部キーを持つモデル。」 belongs_toがhas_oneとhas_manyの両方とやり取りする方法を考えると、これはある程度理にかなっています(明らかに外部キーをhas_manyモデルに入れることはできません)。
所属していません StackOverflow