0

と の 2 つのモデルがShowありVenueます。ショーには 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。何か案は?

4

1 に答える 1

6

外部キーが逆になっています。ActiveRecordの規則では、belongs_toを持つクラスは、外部キーを持つデータベーステーブルにマップする必要があります。ActiveRecord APIを参照してください:「belongs_toアソシエーションは、外部キーを持つモデルで常に使用されます。」これは、belongs_toがhas_oneとhas_manyの両方と相互作用する方法を考えると、ある程度意味があります(has_manyモデルに外部キーを配置できないことは明らかです)。

于 2009-05-02T00:26:38.777 に答える