0

레일스의 액티브 레코드 협회를 이해하고 구현하려고하는데 필요한 특정 관계를 어떻게 조합하는지 이해하는 데 어려움을 겪고 있습니다.여러 모델에 대한 다차간

레시피 모델과 성분 모델이 있습니다. 많은 성분은 하나의 레서피에 속할 것이므로 레시피에는 많은 성분이 들어 있습니다. 이 문제가 MySQL을 통해 처리되는 방법과 모델에서 이러한 관계를 올바르게 구현하는 방법을 파악하는데 어려움을 겪고 있습니다. 여기에 지금까지 내가 가지고있는 (상대적으로 스파 스) 코드 :

모델/recipe.rb

class Recipe < ActiveRecord::Base 
    has_many :ingredients 
end 

모델/ingredient.rb

class Ingredient < ActiveRecord::Base 
    has_and_belongs_to_many :recipes 
end 

그러나, 나는 확신한다 성분 .rb의 연관 선이 잘못되었습니다.

이러한 관계를 올바르게 구현하려면 어떻게해야합니까?

답변

1

귀하의 Recipe 모델의 재료는 has_many 대신 has_and_belongs_to_many이어야합니다. 단일 레시피가 많은 레시피 (@ingredient.recipes) 일 수있는 반면, 단일 레시피는 많은 성분 (예 : @recipe.ingredients)을 가질 수 있습니다.

처음 시작했을 때 이상하게 보였지만 일단 레일스 관계가 작동하는 방식을 알게되면 직관적으로 변합니다. 너는 바른 길을 가고있다.

+0

구체적인 예를 보려면이 페이지를 참조하십시오. http://guides.rubyonrails.org/association_basics.html#the-has_and_belongs_to_many-association –

1

has_many 관계는 일대 다 매핑을 구현하는 반면 has_and_belongs_to_many는 many to many 매핑을 구현합니다. 따라서 has_many는 belongs_to와 쌍을 이루고 has_and_belongs_to_many는 함께 쌍을 이룹니다. 당신은 또한 특정 성분에 사용되는 조리법있는 같은 관계를 찾으려면

레시피와 재료 사이의 관계는 많은 하나에 많은 것입니다. 당신은 것이다 DB를

는 MySQL의에서 has_and_belongs_to_many을 구현하려면 두 테이블 간의 모든 링크를 맵핑하는 세 번째 조인 테이블을 작성해야합니다.

this stackoverflow question에서 조인 테이블의 형식을 더 잘 이해할 수 있습니다.

관련 문제