2009-09-12 190 views
0

我似乎無法繞過Rails協會。假設我有3張桌子。一個用於用戶,一個用於食譜,另一個用於配料。這裏的數據庫(在YAML)的例子:Rails協會

Users: 
    id: 1 
    email: funnyusername 
    password: pass1234 

Recipes: 
    id: 1591 
    user_id: 1 
    name: Pizza Dough 

Ingredients: 
    id: 1 
    name: Flour 

    id: 2 
    name: Water 

    id: 3 
    name: Yeast 

現在我將如何讓這個用戶可以有很多食譜和配方可以有許多配料。還能夠找到每種配料所附的所有配方?

例如,funnyusername創建了食譜「比薩麪糰」,其配料爲麪粉,水和酵母。現在,當我搜索酵母時,我希望它能拿出一份包含酵母的食譜列表。

回答

2

這裏有關聯:

# In User.rb 
has_many :recipes 

# In Recipe.rb 
belongs_to :user 
has_and_belongs_to_many :ingredients 

# In Ingredient.rb 
has_and_belongs_to_many :recipes 

現在,這個假設有一個ingredients_recipes表有兩列,recipe_id & ingredient_id。所以,你的榜樣,你可以找到所有的酵母食譜是這樣的:

@recipes = Ingredient.find(:all, :conditions => {:name=> 'Yeast'}).recipes; 

在你的情況,你有成分,在許多食譜,並有許多成分的配方顯示出來。使用Rails(實際上ActiveRecord的)協會,這是擁有屬於許多(HABTM)解釋here

這裏的約定是,當你與HABTM兩個表關聯,你就會有一個連接表,兩列,每個指向表的主鍵。這個加入表不是本身就有一個相應的型號。最後,表的命名約定是,您按字母順序連接連接表加入的兩個表名稱(配料和配方)。在你的例子中:ingredients_recipes。這當然可以被覆蓋。

+0

啊,謝謝!現在我要測試它並查看數據庫以實際理解* it = p – RyanScottLewis 2009-09-12 04:44:04