2009-09-12 2 views
0

Rails 연관을 둘러싼 내 마음을 감싸고있는 것처럼 보일 수 없습니다. 3 개의 테이블이 있다고 가정 해 봅시다. 하나는 사용자 용, 하나는 조리법 용, 다른 하나는 재료 용입니다. 사용자가 많은 조리법을 가질 수 있도록 Rails Associations

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 

지금 어떻게 그것을 만들 것, 그리고 레시피는 많은 성분을 가질 수 있습니다 : 여기 (YAML에서) 데이터베이스의 예입니다. 또한 각 성분이 붙어있는 모든 요리법을 찾을 수 있습니까?

예를 들어, funnyusername은 밀가루, 물, 그리고 효모가 들어있는 조리법 "피자 반죽"을 만들었습니다. 이제 Yeast를 검색 할 때 Yeast가 들어있는 Recipes 목록이 필요합니다.

답변

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 

자,이 두 개의 열, recipe_id & ingredient_idingredients_recipes 테이블이 있다고 가정합니다. 따라서, 귀하의 예제와 함께, 당신은 효모의 모든 조리법이 방법을 찾을 수있다 : 당신의 상황에서

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

을, 당신은 많은 조리법 많은 성분이 조리법에 표시 성분을 가지고있다. 레일 (실제로 액티브) 협회, 이것은 가 가지고 있고 here

여기 규칙은 당신이 HABTM 두 테이블을 연결할 때, 두 개의 열이있는 결합 테이블을해야한다는 것입니다 설명 많은 (HABTM)에 속하는 각각은 테이블의 기본 키를 가리 킵니다. 이 조인 테이블은 이 아니며 자체에는 해당 모델이 있습니다. 마지막으로 테이블의 명명 규칙은 조인 테이블이 조인하는 테이블의 두 가지 이름 (재료 및 요리법)을 알파벳순으로 조인한다는 것입니다. 귀하의 예 : ingredients_recipes. 이것은 물론 무효화 될 수 있습니다.

+0

아, 감사합니다! 이제 나는 그것을 테스트 해보고 실제로 데이터베이스를 보면서 * 이해하고 있습니다. – RyanScottLewis

관련 문제