【问题标题】:unable to access model related with has_one无法访问与 has_one 相关的模型
【发布时间】:2009-05-02 00:06:50
【问题描述】:

我有两个模型:Show 和 Venue。表演有一个场地,每个场地都属于表演。此条件在两个模型文件中都使用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。有什么想法吗?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 我想我有点困惑,因为我是这样想的:“如果一个节目有一个场地,那么一个节目就有一个场地 ID 来引用那个场地。”但我必须开始思考“如果一个节目属于某个场地,它必须是它所属的场地的 ID。”
    猜你喜欢
    • 2013-12-25
    • 1970-01-01
    • 2014-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多