0

나는 Contributor 모델과 Resource 모델을 가지고 있습니다. 간단한 세계에서 나는 다음과 같은 설정을 가지고있을 것이다 :두 개의 has_many_through 관계가 동일한 모델

class Resource 

    has_many :authorships 
    has_many :contributors, through: :authorships 

end 

class Contributor 

    has_many :authorships 
    has_many :resources, through: :authorships 

end 

그러나 나의 요구 사항은 변경되었다. 제공자는 이제 자원 편집기 또는 자원 작성자가 될 수 있습니다. Contributor은 한 자원의 Editor이고 다른 자원의 Author 일 수 있습니다.

  1. Authorships 결합 모델에 is_editor? 속성의 어떤 종류를 추가하고 효과적으로 각 관계를 주석 : 그래서 내가이 요구 사항을 처리하는 방법은 두 가지가 보인다.

  2. 두 번째 참여 모델 만들기 - Editorship : 가장 현명한 방법은, 또는 내가 부족 다른 접근 방식이

    class Resource 
        has_many :authorships 
        has_many :editorships 
        has_many :contributors, through: :authorships 
        has_many :contributors, through: :editorships 
    
    end 
    
    class Contributor 
        has_many :authorships 
        has_many :editorships 
        has_many :resources, through: :authorships 
        has_many :resources, through: :editorships 
    end 
    

를?

+0

첫 번째 경우는 Rails polymporphic association이 지원하지만 첫 번째 질문은 필자와 동시에 작성자이자 편집자 인 'Contributor'를 지원하고 싶습니까? –

+0

'편집자'와 '저자'는 모두 동일합니다. 그들은 모든면에서 상호 교환이 가능합니다. 하위 클래스로 만들고 다형 관계를 잘못 설정하고 싶지는 않습니다. Join은 관계를 훨씬 더 명확하게 설명합니다. 또한 동일한 데이터가 작성자와 편집자로 표현되므로 많은 중복으로 끝납니다. – Undistraction

+0

내 질문은 사람이 편집자가 될 수 있는지 여부와 같은 자원에 대한 저자. –

답변

1

당신의 설명을 감안할 때, 나는 첫 번째 방법을 사용하지만, 대신 Authorship에 대한 is_editor 부울을 도입, 당신은에 할 수 있습니다 언어와 개념을 일반화하고 대신 지금 할 수있는 contributor_type 필드 ResourceContributorship를 사용 :author 또는 :editor이지만 장래에 확장 될 수 있습니다.

+0

답변 해 주셔서 감사합니다. 이것은 의미가 있습니다. – Undistraction