首页 文章

rails mysql错误问题 - 可能表没有链接

提问于
浏览
0

我一直在解决一些问题,让我们使用sqllite很好地运行rails,并决定转移到mysql .

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

我使用create table details创建了一个迁移并运行了rake db:migrate,现在显示了所有表 .

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

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

recipes
ingredients
steps

成分表是未在db:create或db:schema中创建的表 .

我创建了成分表

class AddIngredientsTable < ActiveRecord::Migration
  def self.up
        create_table :ingredients do |t|
            t.string    :ingredient
            t.float     :amount
            t.string    :measure
            t.string    :description
        end
  end

在我的食谱模型中,我有has_many:成分,我的成分模型有belongs_to:食谱

我得到的错误是

Mysql::Error: Unknown column 'ingredients.recipe_id' in 'where clause': SELECT     `ingredients`.* FROM       `ingredients`  WHERE     (`ingredients`.recipe_id = 1)

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

def show
    @recipe = Recipe.find(params[:id])

    respond_to do |format|
      format.html # show.html.erb
      format.xml  { render :xml => @recipe }
    end
  end

有关寻找什么以及为什么会出现此问题以及如何解决问题的建议?

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

1 回答

  • 1

    Rails使用了很多约定 . 在这种情况下,您正在遵循 has_many :ingredients Recipe 表示 ingredients 表必须具有 recipe_id 的规则 . 显然,您可能希望在许多配方之间共享成分,因此您需要 has_and_belongs_to_many 一个连接表(您将创建另一个迁移) .

    我建议你从with this guide开始全面了解它在Rails中是如何工作的 .

相关问题