铁轨是否具有创建三重对象的内置方式?我是否为他们创建AR模型



我的数据库存储有关电视节目的数据。我想存储有关谁从事哪些情节以及哪些角色工作的信息。

每个船员在许多情节上工作;每个情节都有许多船员。机组人员可以以不同的角色从事同一剧集(例如,他们可以是同一情节的作家和导演)。

我是考虑Activerecord的新手,所以我对如何在铁轨中正确表示这些关系有些困惑。如果有人可以向我付出"铁轨方式"的方式,我真的很喜欢它。

我的本能是创建一个三重加入(或双连接;无论如何三个字段)表。我有三种型号:CrewMember(有一个名称),Episode(具有标题,Airdate等)和Role(具有职务,例如 emurander writer 演员)。我可以创建一个带有三个字段的表:CrewMember_IDEpisode_IDRole_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

最新更新