在一个模型上使用多个 has_many 关联

Posted

技术标签:

【中文标题】在一个模型上使用多个 has_many 关联【英文标题】:Using multiple has_many associations on one model 【发布时间】:2014-11-12 16:03:26 【问题描述】:

我正在一个公司有_many订单的rails应用程序中工作。一个订单有一个名字,就是这样。顺序可以有_many_television_spots、radio_placements和newspaper_placements,这些表中的数据不一样,所以必须拆分。现在,如果一个订单有_many radio_placements,它将没有tvice_spots 或报纸_placements。我的问题是即使模型不存在 has_many 关系也是不好的做法?,让 Company have_many Television_orders 和 Television_order have_many Television_spots 会更好吗?因此,Company have_many radio_orders 和 radio_order have_many radio_placements 等等。我认为第一个选项最初是更干燥的,但是随着应用程序的增长以及我们对数据更改的处理,使用第二种策略可能会产生更清晰、更易于理解的代码。

【问题讨论】:

很难读懂你的问题,使用短句并将代码提取到代码块中以便于阅读 【参考方案1】:

拥有一个实际上没有关联任何模型的 has_many 关联并不是一个坏习惯。真正的问题是radio_placementstelevision_spotsnewspaper_placements 应该真正关联到什么对象类型。如果它们实际上应该与 Order 模型相关,那么将关联放置在那里。根据我对您的问题/数据形状的理解,您似乎确实希望这些关系出现在 Order 模型上。所以像:

class Company
    has_many :orders
    has_many :television_spots, through: :orders
    has_many :radio_placements, through: :orders
    has_many :newspaper_placements, through: :orders
end

class Order
    has_many :television_spots
    has_many :radio_placements
    has_many :newspaper_placements
end

希望对您有所帮助。

【讨论】:

以上是关于在一个模型上使用多个 has_many 关联的主要内容,如果未能解决你的问题,请参考以下文章

has_many :通过关联混淆

如何在同一模型中进行 has_many 和 has_one 关联?

使用 has_many 时如何创建关联模型的实例:通过关联

如何通过关联在 has_many 中使用回调?

如何在父应用程序模型和挂载引擎模型之间设置has_many关联?

处理一个用户模型的 has_one 和 has_many 关联