无法访问与has_one相关的模型

时间:2009-05-02 00:06:50

标签: ruby-on-rails ruby activerecord relational-database has-one

我有两个模型:ShowVenue。 Show有一个场地,而每个场地都属于show。这个条件在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。有什么想法吗?

1 个答案:

答案 0 :(得分:6)

你的外键被反转了。在ActiveRecord的约定中,具有belongs_to的类应该使用外键映射到数据库表。请参阅ActiveRecord API:“belongs_to关联始终在具有外键的模型中使用。”如果您考虑belongs_to与has_one和has_many交互的方式(因为您显然无法将外键放在has_many模型中),这是有道理的。