Rails协会

问题描述:

我似乎无法绕过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创建了食谱“比萨面团”,其配料为面粉,水和酵母。现在,当我搜索酵母时,我希望它能拿出一份包含酵母的食谱列表。

这里有关联:

# 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