【问题标题】:rails mysql error issue - possibly tables not linkedrails mysql错误问题 - 可能表未链接
【发布时间】:2011-04-10 22:55:15
【问题描述】:

我一直在解决一些问题,让 Rails 与 sqllite 表现得很好,并决定转移到 mysql。

我运行了我的 rake db:create 和 rake db:schema,并假设一切正常,但随后 mysql show tables 显示缺少完整的表。

我使用创建表详细信息创建了一个迁移并运行了 rake db:migrate,现在所有表都显示出来了。

不幸的是,表格之间的链接似乎不起作用。

该应用程序是一个相当简单的食谱应用程序。 这些表是

食谱 配料 脚步

成分表不是在 db:create 或 db:schema 中创建的。

我用

创建了成分表 类 AddIngredientsTable

在我的食谱模型中,我有 has_many :ingredients,而我的配料模型有 belongs_to :recipe

我得到的错误是

Mysql ::错误:'where子句'中的未知列'ingredients.recipe_id':选择`ingredients`。* FROM`ingredients` WHERE(`ingredients`.recipe_id = 1)

当然,错误是正确的,即两个表中都不存在 recipe_id 字段。但是我在控制器中也没有这样的请求,它只是简单地读取

 默认显示
    @recipe = Recipe.find(params[:id])

    respond_to 做 |格式|
      format.html # show.html.erb
      format.xml { 渲染 :xml => @recipe }
    结尾
  结尾

关于寻找什么、为什么会出现这个问题以及如何解决它的任何建议?

我不想手动写出 sql,因为我的理解是在这个阶段这不是 rails 方式,虽然我熟悉 sql 所以可以这样做。

【问题讨论】:

    标签: mysql ruby-on-rails


    【解决方案1】:

    Rails 使用了很多约定。在这种情况下,您遇到了Recipe 上的has_many :ingredients 意味着ingredients 表必须具有recipe_id 的规则。显然,您可能希望在许多食谱之间共享成分,因此您需要 has_and_belongs_to_many 和一个连接表(您将为其创建另一个迁移)。

    我建议您从with this guide 开始全面了解它在 Rails 中的工作原理。

    【讨论】:

    • 当然!虽然在这种状态下,成分只与一个配方相关联,但我稍后会进行更改,因此我没有更改 has_and_belongs_to_many,而是创建了一个新迁移并将 recipe_id 添加到成分表中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    • 2011-04-14
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    相关资源
    最近更新 更多