首页
学习
活动
专区
圈层
工具
发布

Rails关联
EN

Stack Overflow用户
提问于 2009-09-12 03:45:42
回答 1查看 360关注 0票数 0

我似乎不能把我的注意力集中在Rails关联上。假设我有3张桌子。一个面向用户,一个面向食谱,还有一个面向配料。下面是一个数据库示例(yaml格式):

代码语言:javascript
复制
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

现在,我该如何使用户可以拥有多个Recipe,并且一个食谱可以有多个配料。还能找到每种配料所附的所有配方吗?

例如,funnyusername创建了食谱“比萨面团”,其中含有面粉、水和酵母的成分。现在,当我搜索酵母时,我希望它能给出一个含有酵母的配方列表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2009-09-12 04:12:40

以下是它们之间的关联:

代码语言:javascript
复制
# 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

现在,假设有一个包含两列recipe_id & ingredient_idingredients_recipes表。因此,在您的示例中,您可以通过以下方式找到所有含有酵母的食谱:

代码语言:javascript
复制
@recipes = Ingredient.find(:all, :conditions => {:name=> 'Yeast'}).recipes;

在你的情况下,你的配料出现在许多食谱中,而食谱中有很多配料。与Rails (实际上是ActiveRecord)关联,这是拥有并属于许多 (HABTM)的原因所在here

这里的约定是,当您将两个表与HABTM关联时,您将拥有一个包含两列的连接表,每一列都指向一个表的主键。此连接表本身没有对应的Model。最后,表的命名约定是按照字母顺序连接连接表所连接的表的两个名称(配料和配方)。在您的示例中: ingredients_recipes。这当然可以被覆盖。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1414214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档