我正在尝试围绕公司的概念构建架构。
公司可以拥有母公司(即集团公司)。一家公司也可以有几家儿童公司。但公司也可以是独立的,既没有子公司也没有母公司。我无法解决如何使用ActiveRecord对其进行建模的问题。这就是我所拥有的:
class Company < ActiveRecord::Base
validates_uniqueness_of :company_id
has_many :products
has_many :subsidiaries, :class_name => "Company", optional: true
belongs_to :parent_company, :class_name => "Company", optional: true
end
理想情况下,我希望能够检查company.subsidiaries
,如果它是零,我知道该公司没有子公司。
任何有助于确定建立这种关系的正确方法的帮助都将不胜感激!
答案 0 :(得分:1)
有什么东西可以阻止您使用ancestry gem吗?它很好地处理这样的树结构,并提供了大量的辅助方法来导航和操作树。
答案 1 :(得分:0)
更多地考虑has_many :through
这个应用程序有点动态http://blog.hasmanythrough.com/2007/10/30/self-referential-has-many-through
更新
我撒谎......误读......第二次新编辑
更新...再次!
实际上,我只是在考虑它。那个博客应该给出一个坚定的工作榜样。对不起,我现在正在加班。睡眠剥夺会让你第二次猜测
答案 2 :(得分:0)
快速查看acts_as_tree gem源显示关系
belongs_to :parent, :class_name => name, :foreign_key => configuration[:foreign_key], :counter_cache => configuration[:counter_cache]
has_many :children, :class_name => name, :foreign_key => configuration[:foreign_key], :order => configuration[:order], :dependent => :destroy
其中:foreign_key将在您的表中设置为parent_id。但请注意,您必须实现遍历act_as_tree gem免费提供的方法。希望这能指明你的某种方向。
答案 3 :(得分:0)
这是我的解决方案:
belongs_to :page, :inverse_of => :subpages
has_many :subpages, class_name: "Page",
foreign_key: "page_id",
dependent: :destroy