Ruby on rails 什么样的连接/模型安排适合这里?

Ruby on rails 什么样的连接/模型安排适合这里?,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我一直在阅读ActiveRecord下可能存在的各种类型的关系,我认为我理解抽象中的所有细节,但它们并没有真正为我点击。我真的很想在这个问题上提出一些建议 在我的实习申请中,我要处理四件具体的事情:观众、电视节目、这些节目的光盘和剧集。然后有一个抽象的东西,观众或“订阅”/“谁看什么”的关系,这就是我遇到麻烦的地方 总结 每个所有者观看多个节目s 每个节目都有许多插曲s 一个插曲属于一个节目 一个所有者拥有许多光盘s 一张光盘属于一个节目,但上面有许多插曲 同一张光盘可以被许多所有者所拥有,但

我一直在阅读ActiveRecord下可能存在的各种类型的关系,我认为我理解抽象中的所有细节,但它们并没有真正为我点击。我真的很想在这个问题上提出一些建议

在我的实习申请中,我要处理四件具体的事情:观众、电视节目、这些节目的光盘和剧集。然后有一个抽象的东西,观众或“订阅”/“谁看什么”的关系,这就是我遇到麻烦的地方

总结
  • 每个
    所有者
    观看多个
    节目
    s
  • 每个
    节目
    都有许多
    插曲
    s
  • 一个
    插曲
    属于一个
    节目
  • 一个
    所有者
    拥有许多
    光盘
    s
  • 一张
    光盘属于一个节目,但上面有许多
    插曲
  • 同一张
    光盘
    可以被许多
    所有者所拥有,但需要有一种方法来确定
    所有者是否拥有一张特定的
    光盘
    ——他们只是观看
    节目
    光盘所属的事实是不够的,必须在某个地方有一个布尔值“拥有”
我需要拿出数据,巧妙地回答以下问题:

  • 用户X观看什么节目
  • 谁看电视节目
  • 用户X拥有多少张光盘
  • 光碟Z上有哪些剧集
  • 哪些剧集还没有出现在光盘上
  • 用户X不拥有他们观看的任何节目光盘吗
我最好的猜测
  • 订阅
    属于:所有者
    属于:显示
  • 联接表,
    subscriptions
    ,有两列:
    t.references:owner
    t.references:show
  • 所有者
    拥有多张:光盘
    拥有多张:放映,通过::订阅
  • Show
    有许多:光盘
    有许多:所有者,通过::订阅
  • Show
    有很多:剧集
  • 剧集
    属于:show
    属于:disc
  • 光盘
    有许多:集
    并且
    属于许多:所有者
问题 它在我的脑海中只是模糊和混乱的,我不确定这样使用联接表,或者使用
has\u和\u属于\u many
是否合适。今天我已经模拟了好几次了,但是试图确定查询和不熟悉的语法,以及试图掌握或正确创建关系,这两者的结合导致了一些挫折和困惑。我非常感谢有人指出我犯的一些错误,让我知道“Railsy”的方法,或者解释正确的关系结构应该是什么。

以下是我要做的:

所有者:

has_many: subscriptions
has_many: disks, through: :subscriptions
展示:

插曲:

belongs_to :show
belongs_to :disk
磁盘:

订阅:

belongs_to: owner
belongs_to: disk
这应该行得通。唯一不存在的是业主-展会关系。我认为这是最好的,因为现实生活中没有联系。唯一真正的连接是通过磁盘(如果您没有任何节目的磁盘,那么您就不会观看该节目)。您可以通过以下方式获得
所有者观看的所有节目(反之亦然):


最后两行未经测试,但我相信它们应该可以正常工作。

属于\u-to \u许多不存在
belongs_to :show
has_many :subscriptions
has_many :owners, through: :subscriptions
has_many :episodes
belongs_to: owner
belongs_to: disk
@shows = @owner.disks.map(&:show).flatten.uniq
@owners = @show.disks.map(&:owners).flatten.uniq