2012-11-12 4 views
0

사용자가 조리법을 업로드하고 좋아하는 조리법을 저장할 수있는 작은 응용 프로그램이 있습니다. 나는 세계의 모든 국가를 가진 country라는 별개의 모델을 가지고 있는데,이 모델은 사용자가 드롭 다운에서 하나를 선택할 수 있도록합니다.이 연결은 왜 작동합니까?

처음에 나는 올바른 관계가 몇 가지 조사 후

조리법

has_one :country 

국가

belongs_to :recipe 

으로 연결을했다

조리법

belongs_to :country 

국가

belongs_to :recipe 

레시피 모델 내에서 진행 외부 키 country_id.

는 좀 더 읽기를 할거야하지만 누군가가이 협회 이유를 설명 할 수 아닌 첫 번째

답변

2

I 게스트는이 같은 관계 구축하려는 :

  • 국가를 수 많은 조리법
  • 있다 그렇다면, 당신은 연결을 정의해야

조리법은 한 국가에 속한다 :

국가 :

has_many :recipes 

조리법 :

belongs_to :country 

그리고 나는 두 번째 연결도 잘못된 생각합니다.

레시피 모델에서 belongs_to :country을 정의하면 레서피 테이블에 country_id이라는 열이 있어야 함을 의미합니다. Country 모델에 외래 키입니다.

첫 번째 정의 연결에서 Country 모델은 recipe_id이라는 열을 가지므로 모든 국가에는 원하는 제조법이 하나뿐입니다. 맞습니까? 왜 효과가없는거야? 한 국가에서는 레코드가 하나뿐이므로 한 국가에서는 recipe_id을 통해 액세스 할 수있는 요리법이 하나만있을 수 있습니다.첫째 협회

, 당신의 관계는 일대일 (한 나라가 하나 개의 레시피를 가지고), 당신은 실제로 협회 일대 (한 나라가 많은 레시피를 가지고)입니다 원하는있다. 그래서 첫 번째 협회가 작동하지 않는 이유입니다 (둘째).

여기서 기억해야 할 주요한 점은 어떤 모델에 belongs_to 연관을 넣을 때 해당 모델에 'association name'_id이라는 열이 있다는 것입니다. has_onebelongs_to 사이의 차이점은과 외래 키의 의미를 넣는 입니다. here을 명확하게 확인하십시오.

+0

감사합니다. 그렇습니다. 그렇습니다. 여러 조리법에 대해 동일한 국가를 지정할 수 있기를 원합니다. – Richlewis

1

내가이 오른쪽 협회 확실하지 않다 궁금했다. belongs_to 연관은 외래 키가있는 모델에서 항상 사용됩니다 (here 참조). 두 테이블에 외래 키가있는 것은 생각할 수있는 한 좋은 생각이 아닙니다. 마지막 연상이 왜 정확하다고 생각하는지 설명 할 수 있습니까?

BTW, 나는 올바른 연관이 있다고 생각 : 국가 has_many 조리법과 요리법 국가 belongs_to

+0

글쎄, 처음에는 조리법 모델에서 has_one : country로 시작했지만,이 솔루션이 나에게 도움이 되었는가하는 질문을 한 후에, 내가 생각하기에 마지막 제휴는 앱 내에서 작동한다는 것입니다. 그러나 나는 그것을 이해하고 싶다. 그리고 어쩌면 나는 그것이 잘못된 것처럼하지 않는가? – Richlewis

+0

왜 이것이 작동하는지 알 수 없습니다. 내가 쓰는 나라가 속한 조리법을 말할 수있는 한, 잘못된 것입니다. 모델을 올바르게 이해하면 각 레시피는 하나의 국가 만 참조 할 수 있지만 각 국가마다 많은 레시피가있을 수 있습니다. 이를 레일로 모델링하는 표준 방법은 위에서 설명한 방법입니다. – davidrac

+0

예. 당신의 방법이 더 이해가되고 이해할 수 있습니다. 내가 나중에 변경하고 여전히 작동하는지 확인합니다. 아무런 문제가 없다고 생각합니다. 테스트를 거치지 않고 실패 할 것 같습니다. 같은 나라에서 2 개의 조리법을 만들면 그럴 수 있습니다. – Richlewis

관련 문제