我的数据库存储有关电视节目的数据。我想存储有关谁从事哪些情节以及哪些角色工作的信息。
每个船员在许多情节上工作;每个情节都有许多船员。机组人员可以以不同的角色从事同一剧集(例如,他们可以是同一情节的作家和导演)。
我是考虑Activerecord的新手,所以我对如何在铁轨中正确表示这些关系有些困惑。如果有人可以向我付出"铁轨方式"的方式,我真的很喜欢它。
我的本能是创建一个三重加入(或双连接;无论如何三个字段)表。我有三种型号:CrewMember
(有一个名称),Episode
(具有标题,Airdate等)和Role
(具有职务,例如 emurander , writer 或演员)。我可以创建一个带有三个字段的表:CrewMember_ID
,Episode_ID
和Role_ID
。然后,每行都会描述以特定能力从事特定情节工作的人。
,这种关系似乎是:
-
CrewMember has_many :episodes
-
Episode has_many :crew_members
-
CrewMember has_many :roles
-
Role has_many :crew_members
。
这是我感到困惑的地方。我会为该表创建一个新模型吗?如果我这样做,我该如何确切地创建该对象的实例?我了解作者has_many的关系:书籍我可以用 Author.books.new
创建一本书,但是这种大量的hosy hosy hasy hasy hasy的东西使我有些困惑。
我可以用SQL做我想做的事,我只是从ORM/activerecord角度接近它时遇到了麻烦。
您可以通过添加收集三个模型
的模型来解决此问题rails g model big_model model1:references model2:references model3:references
使用"作业"作为greentriangle建议
class CrewMember < ActiveRecord::Base
has_many :jobs, dependent: :destroy, inverse_of: :crew_member
has_many :episodes, through: :jobs
has_many :roles, through: :jobs
end
class Episode < ActiveRecord::Base
has_many :jobs, dependent: :destroy, invserse_of: :episode
has_many :crew_members, through: :jobs
has_many :roles, through: :jobs
end
class Role < ActiveRecord::Base
has_many :jobs, dependent: :destroy, inverse_of: :role
end
class Job < ActiveRecord::Base
belongs_to :episode
belongs_to :role
belongs_to :crew_member
validates_presence_of :episode, :role, :crew_member
end