2010-09-10 32 views
0

我一直在努力解決一些問題,讓rails的sqllite表現很好,並決定轉移到mysql。rails mysql的錯誤問題 - 可能的表沒有鏈接

我運行了我的rake db:create和rake db:schema,並假設一切都正常,但是然後mysql show tables顯示一個完整的表格丟失了。

我使用create table details創建了一個遷移,並運行rake db:migrate,現在所有的表都顯示出來。

不幸的是,表格之間的鏈接似乎不起作用。

該應用程序是一個相當簡單的食譜應用程序。 表是

 
recipes 
ingredients 
steps 

的成分表是這是不是在數據庫中創建的:創建或DB:架構。

我創建了

 
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 :ingredientsRecipe意味着ingredients表必須具有recipe_id。很明顯,你可能想要在許多食譜之間共享成分,所以你需要has_and_belongs_to_many帶有連接表(你將創建另一個遷移)。

我建議你從開始,全面瞭解它如何在Rails中工作。

+0

當然!儘管在這種狀態下,成分只與一種配方相關,但我稍後將做出這種改變,所以我沒有改變has_and_belongs_to_many,而是創建了新的遷移並將recipe_id添加到配料表中。 – pedalpete 2010-09-10 23:34:48