我一直在努力解决使用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所以可以这样做。
答案 0 :(得分:1)
Rails使用了很多约定。在这种情况下,您要遵守has_many :ingredients
Recipe
表示ingredients
表格必须recipe_id
的规则。显然,您可能希望在许多配方之间共享成分,因此您需要has_and_belongs_to_many
一个连接表(您将为其创建另一个迁移)。
我建议你从with this guide开始全面了解它在Rails中是如何工作的。