2014-10-29 5 views
0

나는 레일스에 새로운 브랜드이기 때문에 사소한 질문 일 수 있습니다. 자습서를 거치면서 has_many와 has_many를 통해 관계 식별자에 대해 읽었습니다. 내가 이해할 수없는 것은 그들 사이의 차이입니다. 환자와 환자 has_many : 의사와 그들이 관련이있을 것입니다 예를 들어, 내가 3 모델, 의사, 약속 및 환자레일 대 has_many 대 has_many through?

class Doctor< ActiveRecord::Base 
    has_many :appointments 
    has_many :patients, through: :appointments 
end 

class Appointment < ActiveRecord::Base 
    belongs_to :doctor 
    belongs_to :patient 
end 

class Patient < ActiveRecord::Base 
    has_many :appointments 
    has_many :doctors, through: :appointments 
end 

이 있다면 난 그냥 의사 has_many는 말할 수 없습니다? 이것을하기 위해 약속을 지키는 목적은 무엇입니까?

감사

답변

0

당신 말이 맞습니다. 의사 has_many :patients과 환자 has_many :doctors을 말하면 관련이 있습니다.

그러나이 튜토리얼의 내용은 many-to-many 연관이라고 생각합니다. 의사 모델과 환자 모델이 has_many으로 관련된 경우

후 의사가 독점적으로 환자와 의사 소유하고 환자를 소유하고있다. 하지만 종종 그렇지 않을 수도 있습니다. 의사는 많은 환자가있을 수 있으며 그 환자는 의사에게 독점적으로 속하지 않아도됩니다. 그들은 다른 의사를 가질 수도 있습니다. 대다 연관이 들어올 때의

. 대다 협회에서 객체가에 속하지만 독점적으로 많은 개체를 가질 수 있습니다. 이것은 의사 모델과 환자 모델 간의 연관성과 같습니다.

  1. has_and_belongs_to_many
  2. has_many귀하의 경우에는through:#joining 테이블

을 #something하십시오 대다 연결을 생성하는 방법은 두 가지가 있습니다

, 당신은 두 번째 방법을 사용하고 있는데, 합류 테이블은 assocation입니다.

이 두 가지에 대한 자세한 설명은 Railscast을 확인하십시오. 또한이 this official Rails documentation on associations이 도움이 될 것입니다.

0

사용하는 유일한 이유이 경우, 의사와 환자 모두에 관한 약속 데이터를 중간 테이블에 포함 된 일부 관련된 데이터를 사용하고자 할 때 테이블 인 '을 통해'. 당신은 다 대다 관계를 나타 내기 위해 두 모델에 has_and_belongs_to_many를 사용해야하고, 그것과 함께 갈 수있는 적절한 조인 테이블을 만들 수 있도록

또한, has_manybelongs_to 관련 비자 반대를 예상하고있다.

그렇지 않으면 각각 해당 파일에 has_and_belongs_to_many :patientshas_and_belongs_to_many :doctors을 사용할 수 있습니다.

Rails Guide의 섹션 2.8에 특히주의하십시오. 몇 차례의 읽기가 필요할 수도 있지만, 일단 이해하면 이해가됩니다.