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

时间:2010-09-10 21:42:49

标签: mysql ruby-on-rails

我一直在努力解决使用sqllite使用rails表现得很好的问题,并决定转移到mysql。

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

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

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

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

recipes
ingredients
steps

components表是未在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:成分,我的成分模型已归属于:食谱

我得到的错误是

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 个答案:

答案 0 :(得分:1)

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

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