我一直在解决一些问题,让我们使用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 回答
Rails使用了很多约定 . 在这种情况下,您正在遵循
has_many :ingredients
Recipe
表示ingredients
表必须具有recipe_id
的规则 . 显然,您可能希望在许多配方之间共享成分,因此您需要has_and_belongs_to_many
一个连接表(您将创建另一个迁移) .我建议你从with this guide开始全面了解它在Rails中是如何工作的 .