2012-01-24 2 views
1
그래서

내가 레일 설치에 내 루비의 다음 모델 한 IS : 사용자과정액티브의 HAVE 사이의 관계와

content_managers을하는 과정 필요하고 그 content_managers가 만들어집니다 사용자 모델의 여러 개인의

나는 초보자이므로 나와 함께 곰. 나는 두 개의 테이블을 연결하는 user_id와 course_id를 가진 content_managers라는 새로운 모델을 만들려고했다. 코스에 content_managers가 있다는 것은 나에게 의미가 있습니다. 그러나 사용자 모델에서 사용자가 content_managers를 가지고 있다는 것은 의미가 없습니다. 그들 중 일부는 content_managers입니다.

나는 그 생각에서 내가 잘못 생각하고 내가 상상하고있는 것과 다른 방식으로 ActiveRecord를 설정해야한다고 생각합니다. 어떤 도움을 주셔서 감사합니다.

감사합니다.

답변

0

ActiveRecord에는 "have"또는 "are"가없고 "has_many", "has_one"및 "belongs_to"만 있습니다. 이러한 도구를 사용하면 원하는 것을 할 수 있습니다.

예 :

class Course < ActiveRecord::Base 
    has_many :content_managers 
end 

class ContentManager < ActiveRecord::Base 
    has_many :content_manager_members 
    has_many :users, 
    :through => :content_manager_members, 
    :source => :user 
end 

class ContentManagerMember < ActiveRecord::Base 
    belongs_to :course_manager 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :content_manager_members 
    has_many :content_managers, 
    :through => :content_manager_members 
end 

이 제대로 인덱스에 대한 확인 및 과정에 사용자를 탐색하는 속도가 느린 것입니다하지만 당신이 잘되어야합니다. 원하는 성능 수준을 찾으려면이 중 일부를 캐시해야 할 수도 있지만 테스트하는 동안 발견 할 수있는 별도의 문제입니다.

이와 같은 것을 구현할 때마다 예상되는 사용 수준의 약 10 배를 나타내는 충분한 양의 테스트 데이터를로드하여 천장이 어디에 있는지 파악하십시오. 일부 구조는 사소한 데이터 집합 크기에서만 매우 잘 수행되지만 실제 조건에 노출되면 녹습니다.

+0

감사합니다. tadman .... 특히 테스트 조언을 위해. 제가 구현 한 내용을 살펴보고 ContentManagerMember의 목적이 무엇인지 궁금합니다. ContentManager를 (belongs_to : courses, belongs_to : users)로 설정하면 하나의 모델 만 정의하면됩니다. – schmudu

+0

'belongs_to'는 하나의 외래 키 필드를 요구하기 때문에 둘 이상의 것에 속할 수 없습니다. 결국, 'belongs_to : user'는'user_id' 필드의 존재를 의미합니다. 같은 방법으로'user_ids' 필드를 생성 할 수 없습니다. 필자가 이해할 수 있다면 ContentManager는 사용자 그룹의 역할을하므로 그룹 구성원 자격을 설정하려면 사용자와 ContentManager 그룹의 관계를 나타 내기 위해 중간 조인 모델 ContentManagerMember가 필요합니다. – tadman

관련 문제