0

RoR을 사용하여 다음과 같은 기본 구조를 만들려고합니다. 핵심은 모든 사용자가 학교 및 전공과도 연결된다는 것입니다. 사용자는 학교 및 전공에 따라 기사를 작성합니다. 연결은 배타적이지 않습니다. 많은 사용자가 많은 학교 중 하나에 속할 수 있으며 여러 메이저 중 하나에 속할 수 있습니다. 그러나 각 사용자는 둘 이상의 학교에있을 수 없으며 하나 이상의 전공에 속할 수 없습니다. 학교 Y 모두 주요 X 과에서두 개의 링크 된 모델 + 사용자 모델?

  • 모든 사용자
  • 학교 Y의 모든 전공
  • 모든 학교를 : 결국, 나는 다음에 따라 게시물/필터 기사를 표시 할 수 있도록하고 싶습니다 주요 X와

나는이 중 하나가 맞는지 확실하지, 조금 연구를 한 적이 ... 내가 has_many에 비해 아래 has_and_belongs_to_many를 사용한다 (여전히 학습)?

major_schools #(linking the two models below) 

모델 나는 또한 위의 두와 사용자 모델에 통합되어해야 할 일은

class School < ActiveRecord::Base 
    has_many :major_schools 
    has_many :majors, :through => :major_schools 
end 

class Major < ActiveRecord::Base 
    has_many :major_schools 
    has_many :schools, :through => major_schools 
end 



@school.majors #now gives a list of all the majors this school has 
@major.schools #still gives a list of all schools that have this major 

:

class User < ActiveRecord::Base 

    has_and_belongs_to_many :major_schools 

end 

그리고 나는를 꽤 붙어 ... 어떻게 User 모델 데이터를 위의 모델로 가져올 수 있습니까?

+1

한개 이상의 학교가있을 수 있습니까? 그건 맞지 않아. – Shane

+0

셰인, 예 - 예 : "웹 디자인"전공 또는 "역사"전공 또는 "패션"전공 또는 "광고 및 마케팅"전공 - 그들은 학교에만 배타적이지 않습니다. – Caroline

답변

1

도메인 모델이 다소 엉키지 만 작동합니다. 여기

는 아이디 X와 ID를 Y와 학교에서 모두 주요의 모든 사용자를로드하는 방법 중 하나입니다 :

class MajorSchool < ActiveRecord::Base 
    belongs_to :major 
    belongs_to :school 

    has_and_belongs_to_many :users 
end 

# Load all users from this school/major combination 
MajorSchool.where(major_id: X, school_id: Y).users 
1

이유는 간단하지 :

다음
class School < ActiveRecord::Base 
    has_many :major_schools 
    has_many :majors, :through => :major_schools 
    has_many :users 
end 

class Major < ActiveRecord::Base 
    has_many :major_schools 
    has_many :schools, :through => major_schools 
    has_many :users 
end 

class User < ActiveRecord::Base 
    belongs_to :school 
    belongs_to :major 
end 

당신이 할 수 있어야 해야 할 일 :

# all students of the school 
@school.users 

# all students of the school and major (each line should return the same results) 
@school.users.where(major_id: @major.id) 
@major.users.where(school_id: @school.id) 
User.where(school_id: @school.id, major_id: @major.id) 
+0

감사합니다 jacovac. 질문, 왜 has_and_belongs_to_many : users (마지막 has_many : users)를 사용하는 것이 적절하지 않습니까? – Caroline

+1

질문에 따라 정의하고자하는 것은 각 모델 학교마다 여러 모델 사용자가 있고 각 모델 사용자는 하나의 학교에 속해 있다는 것입니다. 'has_and_belongs_to_many'는 _m to n_ associations의 줄임말로 사용됩니다. 따라서 여분의 모델을 원하지 않는다면 학교 및 주요 모델에서 처음 두 개의 has_many를 대체 할 수 있습니다. [guide] (http://guides.rubyonrails.org/association_basics.html#choosing-between-has-many-through-and-has-and-belongs-to- 많은)에서 더 많은 정보. –