我有四个模特,电影,人物,演员和船员,我不确定什么是将它们联系在一起的最佳方式。我应该使用多个通过关联或坚持下面的关联?任何建议都将不胜感激。
我希望能够访问电影对象的节目页面,然后能够列出与电影相关的适当的演员和工作人员。此外,当我访问一个人的节目页面时,我想列出所有他们的演员角色电影,此外,如果他们是剧组的一部分。
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
答案 0 :(得分: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
应该返回角色([&#34; Han Solo&#34;])而不是电影。您可以为cast_memberships
和crew_memberships
表添加属性以获取字符数据或作业说明。