has_and_belongs_to_many 대 has_many through
has_and_belongs_to_many와 has_many의 차이점을 관계를 통해 설명 해주세요. 어느 것을 언제 어디서 사용합니까?
내가 기억하는 한, has_and_belongs_to_many
두 모델을 참조하는 간단한 조회 테이블을 제공합니다.
예를 들면
스토리는 여러 범주에 속할 수 있습니다. 카테고리에는 많은 스토리가있을 수 있습니다.
Categories_Stories Table
story_id | category_id
has_many :through
원래 모델에 속하지 않는 다양한 정보를 저장하는 데 사용할 수있는 세 번째 모델을 제공합니다.
예를 들면
많은 잡지를 구독 할 수 있습니다. 잡지에는 많은 구독자가있을 수 있습니다.
따라서 중간에 구독 모델을 가질 수 있으며, 이는 이전 예제와 유사한 테이블을 제공하지만 추가 속성이 있습니다.
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date
등등.
가장 간단한 경험 법칙은 관계 모델을 독립 엔터티로 사용해야하는 경우 has_many : through 관계를 설정해야한다는 것입니다. 관계 모델에 대해 아무것도 할 필요가 없다면 has_and_belongs_to_many 관계를 설정하는 것이 더 간단 할 수 있습니다 (데이터베이스에 조인 테이블을 생성하는 것을 기억해야합니다). 조인 모델에 대한 유효성 검사, 콜백 또는 추가 속성이 필요한 경우 has_many : through를 사용해야합니다.
내 경험 법칙은 여기에 체크 박스 목록을 가지고 갈 수 있습니까? 그렇다면 habtm 협회입니다. 단순히 yes / no가 아닌 관계에 대해 더 많이 캡처하는 확인란이 필요한 경우 has_many : through를 사용합니다. HABTM은 simple_form collection_check_boxes와 함께 _ids 메소드를 사용하는 것만 큼 간단합니다. Has_many : through는 종종 accepts_nested_attributes_for를 포함합니다.
조인 모델에 대한 유효성 검사, 콜백 또는 추가 속성이 필요한 경우 has_many : through를 사용해야합니다.
많은 답변 은 조인 테이블에 대한 추가 데이터 또는 유효성 검사가 필요하지 않은 경우 has_and_belongs_to_many
와 비교 하여 사용해야 함을 명확히 has_many through:
합니다.
그러나이 방법을 사용하지 않도록주의하십시오. 애플리케이션 개발의 초기 단계에서는 프로젝트 수명주기의 먼 미래에 필요한 추가 기능이나 검증이 무엇인지 아는 것이 거의 불가능 합니다. 을 사용하기로 결정하고 has_and_belongs_to_many
2 년 후에 간단한 데이터 포인트 또는 유효성 검사를 추가하려는 경우이 변경 사항을 마이그레이션하는 것이 매우 어렵고 버그가 발생하기 쉽습니다. 안전을 위해 기본값은has_many :through
내 경험상을 사용하는 것이 항상 더 낫 has_many: through
습니다. 적어도 테이블에 타임 스탬프를 추가 할 수 있기 때문입니다. ActiveRecord
HABTM을 통해 연결된 일부 개체 를 디버깅하는 동안 여러 번 created_at
, updated_at
타임 스탬프 가 누락되었습니다 . 따라서 시간의 맥락에서 데이터 관계 문제를 디버깅하고 조사하는 데 도움이 될 수 있다는 점을 염두에 두십시오. 관계가 생성되거나 업데이트 될 때 "맹인"이되기 때문입니다.
참고 URL : https://stackoverflow.com/questions/2780798/has-and-belongs-to-many-vs-has-many-through
'Nice programing' 카테고리의 다른 글
SPAN의 높이 속성을 설정하는 방법 (0) | 2020.10.18 |
---|---|
NoSQL 데이터베이스를 사용하는 전자 상거래 웹 사이트가 있습니까? (0) | 2020.10.18 |
jQuery-DIV로 커서 따라 가기 (0) | 2020.10.18 |
프로그램 종료 전에 작업 수행 (0) | 2020.10.18 |
특정 클래스의 div를 감지하는 jquery가 DOM에 추가되었습니다. (0) | 2020.10.18 |