2013-10-03 4 views
0

나는 협회에 대한 가이드를 읽었지만 아직 완전히 이해하지 못하고있는 것 같아 확신하기 위해 몇 가지 질문을하고 싶습니다. 다른 많은 것들 중에서도 전 세계의 대도시를 나열 할 앱을 만들고 있다고 가정 해 보겠습니다. 대륙 수준에서 시작하여 필터링 할 수있는 뷰를 가질 계획입니다. 그래서 저는 대륙 모델로 시작할 것입니다. 그리고 나서 국가 모델입니다. 이제 대륙 모델 내에서 has_many : countries라는 연관을 정의 할 것입니다. 그리고 국가 모델에서 나는 belongs_to : 대륙을 사용할 것입니다. 그만큼 나는 이해합니다. 그래서 나의 다음 모델은 주/지방을위한 모델이 될 것입니다. 전 세계에 걸쳐 더 흔하게 볼 수 있기 때문에 지방이라고 부릅니다. 이제는 지방 모델이 생겼고 belongs_to : country를 사용했습니다. 그리고 마찬가지로 국가들은 has_many : provinces를 가질 것입니다. 나의 첫 번째 질문은 주와 대륙의 연관성을 어떻게 기술 할 것인가? Has_many through는 두 모델 모두가 많은 연관성을 설명합니다. 한 주에는 한 대륙 만 있습니다. Has_one through는 세 번째 객체를 통해 일대일 관계가있는 객체 간의 관계를 설명합니다. 대륙에는 많은 주들이 있기 때문에 이것은 마찬가지입니다. 그래서 이것이 제 1 차 질문입니다. 문맥을 통해 일대일로 존재하는 관계를 설명하는 방법. 두 번째 질문은 나중에 다른 계층을 추가하는 상황에서 마이그레이션을 작성하는 데 대한 팁을 요청하는 것입니다. 나중에 군을 말합니다. 하지만 주요 문제는 내가 설명한 관계를 표현하는 방법을 이해하는 것입니다. 또는 심지어 표현할 필요가있는 경우.has_many/belongs_to RoR의 연관

ETA : has_many_through 연관을 사용하려면 반드시 join 테이블 (continent_province)을 만들어야하나요, 아니면 countries 테이블 즉, has_many : provinces -> through : countries를 사용할 수 있습니까?

+0

많은 양은 데이터 사용 방법에 따라 다릅니다. 직접 연결을 많이 필요로하지 않는 한 대륙과 지방 간 직접 연결을 정의 할 필요가 없습니다. 이 경우 네, 당신은'has_many_through'를 할 수 있습니다. 많은 대도시와 각 주를 연관시킬 것입니다. – lurker

+0

답장을 보내 주셔서 감사합니다. 두 가지 이유로 has_many_through 연관이 걱정됩니다. 첫째, 그것은 많은 것에서 많은 것 사이에있는 것으로 정의됩니다. 둘째, has_many_through를 사용할 경우 조인 테이블을 만들고 조인 테이블을 "통과"테이블로 사용해야합니까? '국가'를 '통과'표로 사용하는 것이 훨씬 더 의미있는 것처럼 보일 수 있지만 실제로는 국가 표의 목적이 아닙니다. 아니면 나는 이것을 과도하게 생각하고 있는가? 그것은 일어난 것으로 알려져 있습니다. –

+0

http://guides.rubyonrails.org/association_basics.html을 읽어 보셨습니까? – lurker

답변

1

어딘가에있는 몇 가지 문서에서 몇 가지 작은 예를 둘러 보지 마십시오. 관계 지원은 매우 유연합니다. 결국에는 시도해보십시오 - 모든 종류의 개념 증명이있는 테스터 응용 프로그램이 있습니다. 그 목적입니다.


class Project 
    # one-to-many 
    has_many :scenarios 
    # linking through scenarios 
    has_many :unittests, :through => :scenarios 
    # polymorphic relationship, everything can be relation to one or more appls 
    has_many :appllinks, :as => :applinkable, :dependent => :destroy 
    has_many :appls, :through => :appllinks, :order => 'name' 
    blah blah blah 
end 

class Scenario 
    # many-to-one 
    belongs_to :project 
    # many-to-many 
    has_many :scenariotests 
    has_many :unittests, :through => :scenariotests 
    # polymorphic relationship, everything can be relation to one or more appls 
    has_many :appllinks, :as => :applinkable, :dependent => :destroy 
    has_many :appls, :through => :appllinks, :order => 'name' 
    blah blah blah 
end 

class Unittest 
    # many-to-many 
    has_many :scenariotests 
    has_many :scenarios, :through => :scenariotests 
    # polymorphic relationship, everything can be relation to one or more appls 
    has_many :appllinks, :as => :applinkable, :dependent => :destroy 
    has_many :appls, :through => :appllinks, :order => 'name' 
    blah blah blah 
end