2014-06-06 4 views
0

나는 영화, 사람, 출연자, 승무원의 네 가지 모델을 가지고 있으며, 모두 함께 연결하는 가장 좋은 방법은 무엇인지 확실하지 않습니다. 나는 협회를 통해 많은 것을 가지고 있습니까? 아니면 아래 협회와 계속 지내야합니까? 모든 권장 사항은 크게 감사하겠습니다.이러한 모델을 연결하는 가장 좋은 방법은 무엇입니까?

나는 영화 객체의 쇼 페이지를 방문하고 영화와 관련된 적절한 캐스트와 대원을 나열 할 수 있기를 원합니다. 또한 Person의 프로그램 페이지를 방문하면 승무원의 일원 인 경우 모든 출연자 역할 영화 목록을 원합니다.

class Movie < ActiveRecord::Base 
    has_many :cast 
    has_many :crew 
end 

class Person < ActiveRecord::Base 
    has_many :cast 
    has_many :crew 
end 

class Cast < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :person 
end 

class Crew < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :person 
end 

답변

2
class Movie < ActiveRecord::Base 
    has_many :cast_memberships 
    has_many :crew_memberships 
    has_many :cast_members, :through => :cast_memberships, :source => :person 
    has_many :crew_members, :through => :crew_memberships, :source => :person 

    alias_method :cast, :cast_members 
    alias_method :crew, :crew_members 
end 

class CastMembership < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :person 
end 

class CrewMembership < ActiveRecord::Base 
    belongs_to :movie 
    belongs_to :person 
end 

class Person < ActiveRecord::Base 
end 

class CastMember < Person 
    has_many :cast_memberships, :foreign_key => :person_id 
    has_many :roles, :through => :cast_memberships, :source => :movie 
end 

class CrewMember < Person 
    has_many :crew_memberships, :foreign_key => :person_id 
    has_many :jobs, :through => :crew_memberships, :source => :movie 
end 

> movie = Movie.create! name:"Star Wars" 
> cast_member = CastMember.create! name:"Harrison Ford" 
> movie.cast << cast_member 
> movie.cast # [{name: "Harrison Ford"}] 
> cast_member.roles # [{name: "Star Wars"}] 

이 는 cast_member.roles는 문자 ([ "한 솔로"])이 아닌 영화를 반환해야합니다 요구하는 것은 무엇인지 확실히 아니다. 문자 데이터 또는 작업 설명에 대해 cast_membershipscrew_memberships 테이블에 속성을 추가 할 수 있습니다.

관련 문제